Bladeren bron

支付成功后履约逻辑完善

xufeng 2 jaren geleden
bovenliggende
commit
bd92e0528e
19 gewijzigde bestanden met toevoegingen van 354 en 118 verwijderingen
  1. 7 0
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/Order.java
  2. 0 1
      game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/OrderComplete.java
  3. 1 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/SDKApplication.java
  4. 8 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/listener/OrderPaySuccessListener.java
  5. 55 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/mapper/OrderCompleteCreateMapper.java
  6. 9 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/GameUserRoleService.java
  7. 13 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/GameUserService.java
  8. 23 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameUserImpl.java
  9. 43 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameUserRoleImpl.java
  10. 18 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/OrderCompleteServiceImpl.java
  11. 107 113
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PerformOrderServiceImpl.java
  12. 1 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PlatformOrderServiceImpl.java
  13. 22 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserExtServiceImpl.java
  14. 2 1
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserLoginLogServiceImpl.java
  15. 1 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserServiceImpl.java
  16. 13 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/OrderCompleteService.java
  17. 16 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/PerformOrderService.java
  18. 13 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/UserExtService.java
  19. 2 1
      game-module/game-sdk/src/main/resources/META-INF/spring.factories

+ 7 - 0
game-module/game-mybatis/src/main/java/com/zanxiang/mybatis/entity/Order.java

@@ -2,6 +2,7 @@ package com.zanxiang.mybatis.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
 
@@ -195,8 +196,14 @@ public class Order {
     /**
      * 0正常 1删除
      */
+    @TableLogic
     private Integer isDelete;
 
+    /**
+     * 是否首充 0 否 1 是
+     */
+    private Integer isFirstRecharge;
+
     /**
      * 操作系统
      */

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

@@ -28,7 +28,6 @@ public class OrderComplete implements Serializable {
     /**
      * 订单ID
      */
-    @TableId(value = "order_id", type = IdType.AUTO)
     private Long orderId;
 
     /**

+ 1 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/SDKApplication.java

@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.CrossOrigin;
 @Slf4j
 @EnableDiscoveryClient
 @SpringBootApplication
-@MapperScan("com.zanxiang.mybatis.mapper")
+@MapperScan({"com.zanxiang.mybatis.mapper", "com.zanxiang.sdk.domain.mapper"})
 @Configuration
 public class SDKApplication {
 

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

@@ -47,7 +47,15 @@ public class OrderPaySuccessListener {
             logger.error("订单:{} 获取详情失败", event.getOrderId());
             return;
         }
+        //用户充值统计更新
+        performOrderService.userRechargeTotal(orderInfo);
+        //检查是否为首充(账号首充)
+        Boolean isFirstRecharge = performOrderService.checkIsFirstRecharge(orderInfo);
         //cp推送
         performOrderService.pushCp(orderInfo);
+        //生成宽表数据
+        performOrderService.createOrderComplete(orderInfo);
+
+
     }
 }

+ 55 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/mapper/OrderCompleteCreateMapper.java

@@ -0,0 +1,55 @@
+package com.zanxiang.sdk.domain.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.mybatis.entity.OrderComplete;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+/**
+ * @author xufeng
+ * @date 2022/7/6 11:34
+ */
+public interface OrderCompleteCreateMapper extends BaseMapper<OrderComplete> {
+
+    @Select("<script> " +
+            "SELECT o.*,o.id as orderId,o.amount as orderAmount,u.username AS agentAccount,u.create_time AS regTime,ux.reg_game_id AS regGameId,ux.reg_from AS regFrom,gur.regional_name AS regionalName,gur.role_id AS gameRoleId,gur.role_level AS gameLevel,gur.role_name AS gameRole,gur.role_vip_level AS gameVip,g.`name` AS gameName,gc1.`name` AS gameCategory,g2.`name` AS regGameName,gc2.`name` AS regGameCategory,gpw.pay_way_id AS payWayId,pw.pay_name AS payWayName,pm.merchant_name AS merchantName,pm.merchant_no AS merchantNo FROM h_order o LEFT JOIN h_user u ON o.user_id=u.id LEFT JOIN h_user_ext ux ON u.id=ux.user_id LEFT JOIN h_game_user_role gur ON gur.role_id=o.role_id LEFT JOIN h_game g ON g.id=o.game_id LEFT JOIN h_game_category gc1 ON gc1.id=g.category LEFT JOIN h_game g2 ON g2.id=ux.reg_game_id=g2.id LEFT JOIN h_game_category gc2 ON gc2.id=g2.category LEFT JOIN h_game_pay_way gpw ON gpw.id=o.game_payway_id LEFT JOIN h_pay_way pw ON gpw.pay_way_id=pw.id LEFT JOIN h_pay_merchant pm ON pm.id=gpw.pay_merchant_id " +
+            "WHERE o.id=#{orderId};" +
+            " </script>")
+    OrderComplete info(@Param("orderId") String orderId);
+
+
+//    SELECT
+//    o.*,
+//    o.id as orderId,
+//    o.amount as orderAmount,
+//    u.username as agentAccount,
+//    u.create_time as regTime,
+//    ux.reg_game_id as regGameId,
+//    ux.reg_from as regFrom,
+//    gur.regional_name as regionalName,
+//    gur.role_id as gameRoleId,
+//    gur.role_level as gameLevel,
+//    gur.role_name as gameRole,
+//    gur.role_vip_level as gameVip,
+//    g.`name` as gameName,
+//    gc1.`name` as gameCategory,
+//    g2.`name`as regGameName,
+//    gc2.`name` as regGameCategory,
+//    gpw.pay_way_id as payWayId,
+//    pw.pay_name as payWayName,
+//    pm.merchant_name as merchantName,
+//    pm.merchant_no as merchantNo
+//            FROM
+//    h_order o
+//    LEFT JOIN h_user u ON o.user_id = u.id
+//    LEFT JOIN h_user_ext ux ON u.id = ux.user_id
+//    LEFT JOIN h_game_user_role gur ON gur.role_id = o.role_id
+//    LEFT JOIN h_game g ON g.id = o.game_id
+//    LEFT JOIN h_game_category gc1 ON gc1.id = g.category
+//    LEFT JOIN h_game g2 ON g2.id = ux.reg_game_id = g2.id
+//    LEFT JOIN h_game_category gc2 ON gc2.id = g2.category
+//    LEFT JOIN h_game_pay_way gpw on gpw.id = o.game_payway_id
+//    LEFT JOIN h_pay_way pw ON gpw.pay_way_id = pw.id
+//    LEFT JOIN h_pay_merchant pm ON pm.id = gpw.pay_merchant_id
+//    WHERE o.id = 1;
+}

+ 9 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/GameUserRoleService.java

@@ -0,0 +1,9 @@
+package com.zanxiang.sdk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.mybatis.entity.GameUserRole;
+
+
+public interface GameUserRoleService extends IService<GameUserRole> {
+
+}

+ 13 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/GameUserService.java

@@ -0,0 +1,13 @@
+package com.zanxiang.sdk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.mybatis.entity.GameUser;
+
+/**
+ * @author : xufeng
+ * @time : 2022-07-06
+ * @description : 玩家游戏
+ */
+public interface GameUserService extends IService<GameUser> {
+
+}

+ 23 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameUserImpl.java

@@ -0,0 +1,23 @@
+package com.zanxiang.sdk.service.Impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.mybatis.entity.GameUser;
+import com.zanxiang.mybatis.entity.GameUserRole;
+import com.zanxiang.mybatis.mapper.GameUserMapper;
+import com.zanxiang.mybatis.mapper.GameUserRoleMapper;
+import com.zanxiang.sdk.service.GameUserRoleService;
+import com.zanxiang.sdk.service.GameUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author : xufeng
+ * @time : 2022-07-06
+ */
+@Slf4j
+@Service
+@Transactional
+public class GameUserImpl extends ServiceImpl<GameUserMapper, GameUser> implements GameUserService {
+
+}

+ 43 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameUserRoleImpl.java

@@ -0,0 +1,43 @@
+package com.zanxiang.sdk.service.Impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.common.domain.ResultVo;
+import com.zanxiang.common.enums.ExpireTimeEnum;
+import com.zanxiang.common.enums.HttpStatusEnum;
+import com.zanxiang.common.enums.SmsTypeEnum;
+import com.zanxiang.common.utils.StringUtils;
+import com.zanxiang.mybatis.entity.GameUserRole;
+import com.zanxiang.mybatis.entity.LogPayCp;
+import com.zanxiang.mybatis.mapper.GameUserRoleMapper;
+import com.zanxiang.mybatis.mapper.LogPayCpMapper;
+import com.zanxiang.sdk.common.constant.RedisKeyConstant;
+import com.zanxiang.sdk.common.util.RedisUtil;
+import com.zanxiang.sdk.domain.dto.UserDTO;
+import com.zanxiang.sdk.domain.params.SmsCheckParam;
+import com.zanxiang.sdk.domain.params.SmsSendParam;
+import com.zanxiang.sdk.domain.params.UserData;
+import com.zanxiang.sdk.service.GameUserRoleService;
+import com.zanxiang.sdk.service.SmsService;
+import com.zanxiang.sdk.service.UserService;
+import com.zanxiang.sdk.service.UserTokenService;
+import com.zanxiangnet.module.sms.pojo.SendResult;
+import com.zanxiangnet.module.sms.service.impl.AliSmsService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Objects;
+import java.util.Random;
+
+/**
+ * @author : xufeng
+ * @time : 2022-07-06
+ */
+@Slf4j
+@Service
+@Transactional
+public class GameUserRoleImpl extends ServiceImpl<GameUserRoleMapper, GameUserRole> implements GameUserRoleService {
+
+}

+ 18 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/OrderCompleteServiceImpl.java

@@ -0,0 +1,18 @@
+package com.zanxiang.sdk.service.Impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.mybatis.entity.OrderComplete;
+import com.zanxiang.mybatis.mapper.OrderCompleteMapper;
+import com.zanxiang.sdk.service.OrderCompleteService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 游戏订单全量宽表 服务实现类
+ *
+ * @author xufeng
+ * @date 2022-07-04 11:45
+ */
+@Service
+public class OrderCompleteServiceImpl extends ServiceImpl<OrderCompleteMapper, OrderComplete> implements OrderCompleteService {
+
+}

+ 107 - 113
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PerformOrderServiceImpl.java

@@ -1,15 +1,18 @@
 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.UpdateWrapper;
 import com.zanxiang.common.enums.CpStatusEnum;
+import com.zanxiang.common.enums.OrderStateEnum;
 import com.zanxiang.common.enums.ResEnum;
 import com.zanxiang.common.utils.MD5Util;
 import com.zanxiang.common.utils.StringUtils;
 import com.zanxiang.mybatis.entity.*;
 import com.zanxiang.sdk.common.util.HttpUtil;
 import com.zanxiang.sdk.domain.dto.PlatformOrderDTO;
-import com.zanxiang.sdk.domain.mapper.OrderCompleteMapper;
+import com.zanxiang.sdk.domain.mapper.OrderCompleteCreateMapper;
 import com.zanxiang.sdk.service.*;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
@@ -20,8 +23,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Objects;
+import java.util.TreeMap;
 
 /**
  * 订单履约逻辑
@@ -32,7 +37,7 @@ import java.util.*;
 @Component
 @Slf4j
 @Service
-@Transactional
+@Transactional(rollbackFor = {RuntimeException.class, Exception.class})
 public class PerformOrderServiceImpl implements PerformOrderService {
     protected final Logger logger = LoggerFactory.getLogger(PlatformOrderServiceImpl.class);
 
@@ -43,22 +48,19 @@ public class PerformOrderServiceImpl implements PerformOrderService {
     private LogPayCpService logPayCpService;
 
     @Autowired
-    private UserService userService;
-
-    @Autowired
-    private GamePayWayService gamePayWayService;
+    private OrderCompleteCreateMapper orderCompleteMapper;
 
     @Autowired
-    private PayMerchantService payMerchantService;
+    private GameUserRoleService gameUserRoleService;
 
     @Autowired
-    private GameUserRoleService gameUserRoleService;
+    private GameUserService gameUserService;
 
     @Autowired
-    private UserExtService userExtService;
+    private UserService userService;
 
     @Autowired
-    private OrderCompleteMapper orderCompleteMapper;
+    private OrderCompleteService orderCompleteService;
 
     public Boolean pushCp(PlatformOrderDTO orderInfo) {
         if (orderInfo.getCpStatus() == CpStatusEnum.SUCCESS.getCode()) {
@@ -116,121 +118,113 @@ public class PerformOrderServiceImpl implements PerformOrderService {
             logPayCpService.save(logPayCp);
         } catch (Exception e) {
             logger.error("订单:{} 通知cp方失败 e:{}", orderId, e);
-            e.printStackTrace();
         }
         return false;
     }
 
     @Override
     public Boolean createOrderComplete(PlatformOrderDTO orderInfo) {
-        OrderComplete orderComplete = new OrderComplete();
-        orderComplete.setOrderId(Long.valueOf(orderInfo.getId()));
-        orderComplete.setGameId(StringUtils.isNotEmpty(orderInfo.getGameId()) ? Long.valueOf(orderInfo.getGameId()) : null);
-        orderComplete.setOrderDate(orderInfo.getCreateTime());
-        orderComplete.setCpOrderId(StringUtils.isNotEmpty(orderInfo.getCpOrderId()) ? orderInfo.getCpOrderId() : "");
-        orderComplete.setMerchantOrderNo(orderInfo.getMerchantOrderNo());
-        orderComplete.setUserId(StringUtils.isNotEmpty(orderInfo.getUserId()) ? Long.valueOf(orderInfo.getUserId()) : null);
-        orderComplete.setCpId(StringUtils.isNotEmpty(orderInfo.getCpId()) ? Long.valueOf(orderInfo.getCpId()) : null);
-        orderComplete.setProductId(orderInfo.getProductId());
-        orderComplete.setProductName(orderInfo.getProductName());
-        orderComplete.setOrderAmount(orderInfo.getAmount());
-        orderComplete.setRealAmount(orderInfo.getRealAmount());
-        orderComplete.setIsSwitch(orderInfo.getIsSwitch());
-        orderComplete.setPayTime(orderInfo.getPayTime());
-        orderComplete.setLastCpNotifyTime(orderInfo.getLastCpNotifyTime());
-        orderComplete.setStatus(orderInfo.getStatus());
-        orderComplete.setCpStatus(orderInfo.getCpStatus());
-        orderComplete.setIsDelete(orderInfo.getIsDelete());
-        orderComplete.setChannel(orderInfo.getChannel());
-        orderComplete.setCreateTime(orderInfo.getCreateTime());
-        orderComplete.setEndTime(orderInfo.getEndTime());
-        orderComplete.setPayDevice(orderInfo.getPayDevice());
-        orderComplete.setGameRoleId(orderInfo.getRoleId());
-
-        /*-------支付那一刻系统------*/
-        orderComplete.setFromDevice(orderInfo.getFromDevice());
-
-
-        //todo 获取游戏信息
-        orderComplete.setGameName("");
-        orderComplete.setGameCategory("");
-        orderComplete.setGameRegional("");
-        orderComplete.setGameLevel("");
-        orderComplete.setGameVip("");
-
-        if (StringUtils.isNotEmpty(orderInfo.getRoleId())) {
-            GameUserRole userRole = gameUserRoleService.getOne(new QueryWrapper<GameUserRole>().lambda().eq(GameUserRole::getRoleId, orderInfo.getRoleId()));
-            if (!Objects.isNull(userRole)) {
-                orderComplete.setGameRegional(userRole.getRegionalName());
-                orderComplete.setGameLevel(userRole.getRoleLevel() != null ? String.valueOf(userRole.getRoleLevel()) : null);
-                orderComplete.setGameVip(userRole.getRoleVipLevel() != null ? String.valueOf(userRole.getRoleVipLevel()) : null);
+        try {
+            OrderComplete orderComplete = orderCompleteMapper.info(orderInfo.getId());
+            orderComplete.setOrderDate(orderInfo.getCreateTime());
+            //todo 推广相关信息
+            orderComplete.setAgentId("");
+            orderComplete.setAgentAccount("");
+            orderComplete.setAgentMedia("");
+            orderComplete.setAgentAdvert("");
+
+            //todo 广告通知状态
+            orderComplete.setAdvertNotifyStatus(0);
+            orderComplete.setAdvertNotifyType(0);
+
+            OrderComplete complete = orderCompleteService.getOne(new LambdaQueryWrapper<OrderComplete>().eq(OrderComplete::getOrderId, orderInfo.getId()));
+            if (Objects.isNull(complete)) {
+                orderCompleteMapper.insert(orderComplete);
+                logger.info("订单:{} 生成宽表数据成功", orderInfo.getId());
+            } else {
+                OrderComplete pa = new OrderComplete();
+                pa.setOrderId(complete.getOrderId());
+                orderCompleteService.update(pa, new UpdateWrapper<OrderComplete>().setEntity(orderComplete));
+                logger.info("订单:{} 宽表数据更新成功", orderInfo.getId());
             }
+            return true;
+        } catch (Exception e) {
+            logger.error("订单:{} 生成宽表数据失败 e:{}", orderInfo.getId(), e);
         }
+        return false;
+    }
 
-
-        //todo 获取玩家账号信息
-        orderComplete.setUserAccount("");
-        orderComplete.setUserRegisterTime(new Date());
-
-        if (StringUtils.isNotEmpty(orderInfo.getUserId())) {
-            User userInfo = userService.getById(orderInfo.getUserId());
-            if (!Objects.isNull(userInfo)) {
-                orderComplete.setUserAccount(userInfo.getUsername());
-                orderComplete.setUserRegisterTime(userInfo.getCreateTime() != null ? Date.from(userInfo.getCreateTime().atZone(ZoneId.systemDefault()).toInstant()) : null);
+    @Override
+    public Boolean checkIsFirstRecharge(PlatformOrderDTO orderInfo) {
+        try {
+            Order one = platformOrderService.getOne(new QueryWrapper<Order>().lambda().eq(Order::getUserId, orderInfo.getUserId()).ne(Order::getId, orderInfo.getId()).last("limit 1"));
+            if (Objects.isNull(one)) {
+                Order order = new Order();
+                order.setId(order.getId());
+                order.setIsFirstRecharge(1);
+                platformOrderService.updateById(order);
+                logger.info("订单:{} 验证订单是否为首充成功", orderInfo.getId());
+                return true;
             }
+        } catch (Exception e) {
+            logger.error("订单:{} 验证订单是否为首充失败 e:{}", orderInfo.getId(), e);
         }
-        //todo 注册游戏信息
-        orderComplete.setUserRegisterGameId(0L);
-        orderComplete.setUserRegisterGame("");
-        orderComplete.setUserRegisterGameCategory("");
-        orderComplete.setUserRegisterChannel("");
-
-        if (StringUtils.isNotEmpty(orderInfo.getUserId())) {
-            UserExt userExt = userExtService.getById(orderInfo.getUserId());
-            if (!Objects.isNull(userExt)) {
-                orderComplete.setUserRegisterGameId(userExt.getRegGameId());
-                orderComplete.setUserRegisterChannel(userExt.getRegFrom());
+        return true;
+    }
 
+    @Override
+    public Boolean userRechargeTotal(PlatformOrderDTO orderInfo) {
+        try {
+            //订单取消情况 做减法
+            float amount = orderInfo.getAmount().floatValue();
+            int num = 1;
+            if (orderInfo.getStatus().equals(OrderStateEnum.CANCEL.getCode())) {
+                amount = -amount;
+                num = -1;
             }
-        }
-
-
-        //todo 推广相关信息
-        orderComplete.setAgentId("");
-        orderComplete.setAgentAccount("");
-        orderComplete.setAgentMedia("");
-        orderComplete.setAgentAdvert("");
-
-
-        //todo 支付相关信息
-        orderComplete.setPayWayId("");
-        orderComplete.setPayWay("");
-        orderComplete.setMerchantNo("");
-        orderComplete.setMerchantName("");
-        if (StringUtils.isNotEmpty(orderInfo.getGamePaywayId())) {
-            GamePayWay gamePayWay = gamePayWayService.getInfo(orderInfo.getGamePaywayId());
-            if (!Objects.isNull(gamePayWay)) {
-                orderComplete.setPayWayId(gamePayWay.getPayWayId() > 0 ? String.valueOf(gamePayWay.getPayWayId()) : null);
-                orderComplete.setPayWay(gamePayWay.getPayWayName());
-
-                if (!Objects.isNull(gamePayWay.getPayMerchantId())) {
-                    PayMerchant payMerchant = payMerchantService.getById(gamePayWay.getPayMerchantId());
-                    if (!Objects.isNull(payMerchant)) {
-                        orderComplete.setMerchantNo(payMerchant.getMerchantNo());
-                        orderComplete.setMerchantName(payMerchant.getMerchantName());
-                    }
-                }
+            //游戏用户角色统计更新
+            if (StringUtils.isNotEmpty(orderInfo.getRoleId())) {
+                GameUserRole gameUserRole = new GameUserRole();
+                gameUserRole.setRoleId(orderInfo.getRoleId());
+                gameUserRoleService.update(gameUserRole, new UpdateWrapper<GameUserRole>().lambda()
+                        .set(GameUserRole::getLastRechargeTime, orderInfo.getPayTime())
+                        .setSql("recharge_count=recharge_count+" + num)
+                        .setSql("recharge_money=recharge_money+" + amount)
+                        .setEntity(gameUserRole)
+                );
+            } else {
+                logger.info("订单:{} 用户玩家角色RoleId为空,不进行gameUserRole充值统计汇总", orderInfo.getId());
+            }
+            //游戏用户统计更新
+            if (StringUtils.isNotEmpty(orderInfo.getMgUserId())) {
+                GameUser gameUser = new GameUser();
+                gameUser.setId(Long.valueOf(orderInfo.getMgUserId()));
+                gameUserService.update(gameUser, new UpdateWrapper<GameUser>().lambda()
+                        .set(GameUser::getLastRechargeTime, orderInfo.getPayTime())
+                        .setSql("recharge_count=recharge_count+" + num)
+                        .setSql("recharge_money=recharge_money+" + amount)
+                        .setEntity(gameUser)
+                );
+            } else {
+                logger.info("订单:{} 用户玩家MgUserId为空,不进行gameUser充值统计汇总", orderInfo.getId());
             }
+            //用户统计更新
+            if (StringUtils.isNotEmpty(orderInfo.getUserId())) {
+                User user = new User();
+                user.setId(Long.valueOf(orderInfo.getUserId()));
+                userService.update(user, new UpdateWrapper<User>().lambda()
+                        .set(User::getLastRechargeTime, orderInfo.getPayTime())
+                        .setSql("recharge_count=recharge_count+" + num)
+                        .setSql("recharge_money=recharge_money+" + amount)
+                        .setEntity(user)
+                );
+            } else {
+                logger.info("订单:{} 用户UserId为空,不进行User充值统计汇总", orderInfo.getId());
+            }
+            return true;
+        } catch (Exception e) {
+            logger.error("订单:{} 用户充值统计逻辑操作失败 e:{}", orderInfo.getId(), e);
         }
-
-
-        //todo 是否首充单独更新
-        orderComplete.setIsFirstRecharge(0);
-
-        //todo 广告通知状态
-        orderComplete.setAdvertNotifyStatus(0);
-        orderComplete.setAdvertNotifyType(0);
-
-        return null;
+        return false;
     }
 }

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

@@ -34,6 +34,7 @@ import java.util.Date;
 @Component
 @Slf4j
 @Service
+@Transactional
 public class PlatformOrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements PlatformOrderService {
     protected final Logger logger = LoggerFactory.getLogger(PlatformOrderServiceImpl.class);
 
@@ -45,7 +46,6 @@ public class PlatformOrderServiceImpl extends ServiceImpl<OrderMapper, Order> im
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-
     public String create(PlatformOrderBO platformOrderBO) {
         try {
             logger.info("生成订单请求参数 platformOrderBO:{}", platformOrderBO);

+ 22 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserExtServiceImpl.java

@@ -0,0 +1,22 @@
+package com.zanxiang.sdk.service.Impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.mybatis.entity.UserExt;
+import com.zanxiang.mybatis.mapper.UserExtMapper;
+import com.zanxiang.sdk.service.UserExtService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author : xufeng
+ * @time : 2022-07-06
+ * @description : 玩家拓展信息
+ */
+@Slf4j
+@Service
+@Transactional
+public class UserExtServiceImpl extends ServiceImpl<UserExtMapper, UserExt> implements UserExtService {
+
+
+}

+ 2 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/UserLoginLogServiceImpl.java

@@ -1,6 +1,7 @@
 package com.zanxiang.sdk.service.Impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.common.utils.StringUtils;
 import com.zanxiang.mybatis.entity.User;
 import com.zanxiang.mybatis.entity.UserLoginLog;
 import com.zanxiang.mybatis.mapper.UserLoginLogMapper;
@@ -35,7 +36,7 @@ public class UserLoginLogServiceImpl extends ServiceImpl<UserLoginLogMapper, Use
                 .fromDevice(user.getFromDevice())
                 .deviceId(user.getDeviceId())
                 .loginIp(realIp)
-                .gameId(gameId)
+                .gameId(StringUtils.isNotEmpty(gameId) ? Long.valueOf(gameId) : null)
                 .loginTime(LocalDateTime.now())
                 .build();
         super.save(userLoginLog);

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

@@ -33,6 +33,7 @@ import java.util.Objects;
  */
 @Slf4j
 @Service
+@Transactional
 public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
 
     @Autowired

+ 13 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/OrderCompleteService.java

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

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

@@ -24,4 +24,20 @@ public interface PerformOrderService {
      * @return
      */
     Boolean createOrderComplete(PlatformOrderDTO orderInfo);
+
+    /**
+     * 检查订单是否为首单(账号首充)
+     *
+     * @param orderInfo
+     * @return
+     */
+    Boolean checkIsFirstRecharge(PlatformOrderDTO orderInfo);
+
+    /**
+     * 更新游戏玩家充值统计
+     *
+     * @param orderInfo
+     * @return
+     */
+    Boolean userRechargeTotal(PlatformOrderDTO orderInfo);
 }

+ 13 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/UserExtService.java

@@ -0,0 +1,13 @@
+package com.zanxiang.sdk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.mybatis.entity.UserExt;
+
+/**
+ * @author : xufeng
+ * @time : 2022-07-06
+ * @description : 玩家拓展信息
+ */
+public interface UserExtService extends IService<UserExt> {
+
+}

+ 2 - 1
game-module/game-sdk/src/main/resources/META-INF/spring.factories

@@ -1,3 +1,4 @@
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
   com.zanxiang.common.handler.GlobalExceptionHandler,\
-  com.zanxiang.common.utils.SpringUtils
+  com.zanxiang.common.utils.SpringUtils,\
+  com.zanxiang.sdk.common.listener.OrderPaySuccessListener