ソースを参照

订单履约逻辑增加 商户号支付额度统计

xufeng 2 年 前
コミット
2403a6a197

+ 55 - 4
game-module/game-common/src/main/java/com/zanxiang/common/utils/DateUtils.java

@@ -10,10 +10,7 @@ import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAccessor;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
+import java.util.*;
 
 /**
  * 时间工具类
@@ -399,4 +396,58 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);
         return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant()).getTime();
     }
+
+    /**
+     * 验证当前时间是否为当天
+     *
+     * @param time
+     * @return
+     */
+    public static boolean isToday(Date time) {
+        return isThisTime(time, "yyyy-MM-dd");
+    }
+
+    /**
+     * 验证当前时间是否为当月
+     *
+     * @param time
+     * @return
+     */
+    public static boolean isThisMonth(Date time) {
+        return isThisTime(time, "yyyy-MM");
+    }
+
+    /**
+     * 验证当前时间是否为本周
+     *
+     * @param time
+     * @return
+     */
+    public static boolean isThisWeek(Date time) {
+        Calendar calendar = Calendar.getInstance();
+        int currentWeek = calendar.get(Calendar.WEEK_OF_YEAR);
+        calendar.setTime(time);
+        int paramWeek = calendar.get(Calendar.WEEK_OF_YEAR);
+        if (paramWeek == currentWeek) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 验证日期规则
+     *
+     * @param date
+     * @param pattern
+     * @return
+     */
+    private static boolean isThisTime(Date date, String pattern) {
+        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
+        String param = sdf.format(date);//参数时间
+        String now = sdf.format(new Date());//当前时间
+        if (param.equals(now)) {
+            return true;
+        }
+        return false;
+    }
 }

+ 6 - 3
game-module/game-sdk/src/main/java/com/zanxiang/sdk/common/listener/OrderPaySuccessListener.java

@@ -42,20 +42,23 @@ public class OrderPaySuccessListener {
             logger.error("缺少订单ID");
             return;
         }
+        logger.info("订单:{} 支付成功履约监听逻辑开始 ------start---------", event.getOrderId());
         PlatformOrderDTO orderInfo = platformOrderService.info(event.getOrderId());
         if (Objects.isNull(orderInfo)) {
             logger.error("订单:{} 获取详情失败", event.getOrderId());
             return;
         }
-        //用户充值统计更新
-        performOrderService.userRechargeTotal(orderInfo);
         //检查是否为首充(账号首充)
         Boolean isFirstRecharge = performOrderService.checkIsFirstRecharge(orderInfo);
         //cp推送
         performOrderService.pushCp(orderInfo);
         //生成宽表数据
         performOrderService.createOrderComplete(orderInfo);
+        //用户充值统计更新
+        performOrderService.userRechargeTotal(orderInfo);
+        //商户号额度统计更新
+        performOrderService.payMerchantTotal(orderInfo);
 
-
+        logger.info("订单:{} 支付成功履约监听逻辑开始 ------end---------", event.getOrderId());
     }
 }

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

@@ -0,0 +1,12 @@
+package com.zanxiang.sdk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.mybatis.entity.Game;
+
+/**
+ * @author : xufeng
+ * @time : 2022-07-13
+ * @description : 游戏管理
+ */
+public interface GameService extends IService<Game> {
+}

+ 19 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameServiceImpl.java

@@ -0,0 +1,19 @@
+package com.zanxiang.sdk.service.Impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.mybatis.entity.Game;
+import com.zanxiang.mybatis.mapper.GameMapper;
+import com.zanxiang.sdk.service.GameService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author : xufeng
+ * @time : 2022-07-13
+ * @description : game管理
+ */
+@Slf4j
+@Service
+public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements GameService {
+
+}

+ 97 - 8
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PerformOrderServiceImpl.java

@@ -7,7 +7,9 @@ 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.DateUtils;
 import com.zanxiang.common.utils.MD5Util;
+import com.zanxiang.common.utils.ObjectUtil;
 import com.zanxiang.common.utils.StringUtils;
 import com.zanxiang.mybatis.entity.*;
 import com.zanxiang.sdk.common.util.HttpUtil;
@@ -22,11 +24,9 @@ import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Objects;
-import java.util.TreeMap;
+import java.util.*;
 
 /**
  * 订单履约逻辑
@@ -62,15 +62,38 @@ public class PerformOrderServiceImpl implements PerformOrderService {
     @Autowired
     private OrderCompleteService orderCompleteService;
 
+    @Autowired
+    private GameService gameService;
+
+    @Autowired
+    private GamePayWayService gamePayWayService;
+
+    @Autowired
+    private PayMerchantService payMerchantService;
+
     public Boolean pushCp(PlatformOrderDTO orderInfo) {
+        logger.info("订单:{} 充值成功推送cp方回调 ----------start---------", orderInfo.getId());
         if (orderInfo.getCpStatus() == CpStatusEnum.SUCCESS.getCode()) {
             return true;
         }
+        if (orderInfo.getGameId() <= 0) {
+            logger.error("订单:{} 充值成功推送cp方回调失败,订单中GameId不存在", orderInfo.getId());
+            return false;
+        }
         String orderId = orderInfo.getId();
-        //todo 待完善
-        String app_key = "111";
-        String cpPaybackUrl = "https://baidu.com";
 
+        //获取游戏中的app_key与app_key信息
+        Game gameInfo = gameService.getById(orderInfo.getGameId());
+        if (Objects.isNull(gameInfo)) {
+            logger.error("订单:{} 充值成功推送cp方回调失败,订单中GameId:{} 的游戏信息未找到", orderInfo.getId(), orderInfo.getGameId());
+            return false;
+        }
+        String app_key = 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(), app_key, cpPaybackUrl);
+            return false;
+        }
         HashMap<String, String> map = new HashMap<>();
         map.put("app_id", String.valueOf(orderInfo.getGameId()));
         map.put("cp_order_id", orderInfo.getCpOrderId());
@@ -116,14 +139,17 @@ public class PerformOrderServiceImpl implements PerformOrderService {
             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);
+            logger.error("订单:{} 充值成功推送cp方回调 失败 e:{}", orderId, e);
         }
         return false;
     }
 
     @Override
     public Boolean createOrderComplete(PlatformOrderDTO orderInfo) {
+        logger.info("订单:{} 创建订单宽表 ----------start---------", orderInfo.getId());
         try {
             OrderComplete orderComplete = orderCompleteMapper.info(orderInfo.getId());
             orderComplete.setOrderDate(orderInfo.getCreateTime());
@@ -156,6 +182,7 @@ public class PerformOrderServiceImpl implements PerformOrderService {
 
     @Override
     public Boolean checkIsFirstRecharge(PlatformOrderDTO orderInfo) {
+        logger.info("订单:{} 检查更新用户是否为首充 ----------start---------", orderInfo.getId());
         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)) {
@@ -174,6 +201,7 @@ public class PerformOrderServiceImpl implements PerformOrderService {
 
     @Override
     public Boolean userRechargeTotal(PlatformOrderDTO orderInfo) {
+        logger.info("订单:{} 更新用户充值统计 ----------start---------", orderInfo.getId());
         try {
             //订单取消情况 做减法
             float amount = orderInfo.getAmount().floatValue();
@@ -227,4 +255,65 @@ public class PerformOrderServiceImpl implements PerformOrderService {
         }
         return false;
     }
+
+    @Override
+    public Boolean payMerchantTotal(PlatformOrderDTO orderInfo) {
+        logger.info("订单:{} 更新商户号统计 ----------start---------", orderInfo.getId());
+        try {
+            if (StringUtils.isEmpty(orderInfo.getGamePaywayId())) {
+                logger.error("订单:{} 更新商户号统计时,该订单GamePaywayId为空", orderInfo.getId());
+                return false;
+            }
+            GamePayWay gamePayWayInfo = gamePayWayService.getInfo(orderInfo.getGamePaywayId());
+            if (Objects.isNull(gamePayWayInfo)) {
+                logger.error("订单:{} 更新商户号统计时,获取GamePayway表id:{}信息为空", orderInfo.getId(), orderInfo.getGamePaywayId());
+                return false;
+            }
+            if (gamePayWayInfo.getPayMerchantId() <= 0) {
+                logger.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());
+                return false;
+            }
+            BigDecimal amount = orderInfo.getAmount();
+            Date update_time = payMerchantInfo.getDayUpdateDate();
+            Date date = new Date();
+            String totalPayAmount, mouthPayAmount, weakerPayAmount, dayPayAmount;
+            totalPayAmount = " total_pay_amount = total_pay_amount + " + amount;
+            mouthPayAmount = " mouth_pay_amount = mouth_pay_amount + " + amount;
+            weakerPayAmount = " weaker_pay_amount = weaker_pay_amount + " + amount;
+            dayPayAmount = " day_pay_amount = day_pay_amount + " + amount;
+            if (update_time != null) {
+                if (!DateUtils.isThisMonth(payMerchantInfo.getMouthUpdateDate())) {
+                    mouthPayAmount = " mouth_pay_amount = " + amount;
+                }
+
+                if (!DateUtils.isThisWeek(payMerchantInfo.getWeakerUpdateDate())) {
+                    weakerPayAmount = " weaker_pay_amount = " + amount;
+                }
+
+                if (!DateUtils.isToday(payMerchantInfo.getDayUpdateDate())) {
+                    dayPayAmount = " day_pay_amount = " + amount;
+                }
+            }
+            payMerchantService.update(new UpdateWrapper<PayMerchant>().lambda()
+                    .set(PayMerchant::getMouthUpdateDate, date)
+                    .set(PayMerchant::getWeakerUpdateDate, date)
+                    .set(PayMerchant::getDayUpdateDate, date)
+                    .setSql(totalPayAmount)
+                    .setSql(mouthPayAmount)
+                    .setSql(weakerPayAmount)
+                    .setSql(dayPayAmount)
+                    .setEntity(payMerchantInfo)
+            );
+            logger.info("订单:{} 更新商户号统计 ----------end---------", orderInfo.getId());
+            return true;
+        } catch (Exception e) {
+            logger.error("订单:{} 更新商户号统计失败 e:{}", orderInfo.getId(), e);
+        }
+        return false;
+    }
 }

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

@@ -40,4 +40,12 @@ public interface PerformOrderService {
      * @return
      */
     Boolean userRechargeTotal(PlatformOrderDTO orderInfo);
+
+    /**
+     * 更新商户号统计
+     *
+     * @param orderInfo
+     * @return
+     */
+    Boolean payMerchantTotal(PlatformOrderDTO orderInfo);
 }