瀏覽代碼

feat : 订单上报接口

bilingfeng 2 年之前
父節點
當前提交
d693752f51

+ 1 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/enums/CallBackEnum.java → game-module/game-common/src/main/java/com/zanxiang/common/enums/CallBackEnum.java

@@ -1,4 +1,4 @@
-package com.zanxiang.sdk.enums;
+package com.zanxiang.common.enums;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 20 - 0
game-module/game-common/src/main/java/com/zanxiang/common/enums/PayWayEnum.java

@@ -3,6 +3,8 @@ package com.zanxiang.common.enums;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
+import java.util.Objects;
+
 /**
  * 支付方式枚举
  *
@@ -43,4 +45,22 @@ public enum PayWayEnum {
      */
     private final Integer num;
 
+    /**
+     * 根据书城key获取名称
+     *
+     * @param payType : 支付类型
+     * @return : 支付类型枚举
+     */
+    public static String getByPayType(Long payType) {
+        if (payType == null) {
+            return null;
+        }
+        for (PayWayEnum payWayEnum : PayWayEnum.values()) {
+            if (Objects.equals(payType.intValue(), payWayEnum.getNum())) {
+                return payWayEnum.getName();
+            }
+        }
+        return null;
+    }
+
 }

+ 7 - 0
game-module/game-manage/pom.xml

@@ -88,6 +88,7 @@
             <groupId>com.zanxiang.erp</groupId>
             <artifactId>erp-security</artifactId>
         </dependency>
+        <!-- dubbo -->
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-spring-boot-starter</artifactId>
@@ -96,6 +97,12 @@
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-metadata-definition-protobuf</artifactId>
         </dependency>
+        <!-- 头条回传api -->
+        <dependency>
+            <groupId>com.zanxiang.advertising.oceanengine</groupId>
+            <artifactId>advertising-oceanengine-track-base</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 11 - 6
game-module/game-manage/src/main/java/com/zanxiang/manage/controller/OrderController.java

@@ -15,10 +15,7 @@ import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author : lingfeng
@@ -38,7 +35,7 @@ public class OrderController {
 
     @ApiOperation(value = "订单列表")
     @PostMapping(value = "/list")
-    @PreAuthorize(permissionKey = "sdk:order:list")
+    @PreAuthorize(permissionKey = "sdk:order:orderList")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = OrderListVO.class, responseContainer = "list")})
     public ResultVO<OrderListVO> orderList(@Validated @RequestBody OrderParam param) {
         return ResultVO.ok(orderService.orderList(param));
@@ -46,9 +43,17 @@ public class OrderController {
 
     @ApiOperation(value = "订单回调CP列表")
     @PostMapping(value = "/cp/call/list")
-    @PreAuthorize(permissionKey = "sdk:logPayCp:list")
+    @PreAuthorize(permissionKey = "sdk:order:callCpList")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = LogPayCpVO.class, responseContainer = "list")})
     public ResultVO<IPage<LogPayCpVO>> callCpList(@Validated @RequestBody LogPayCpParam param) {
         return ResultVO.ok(logPayCpService.callCpList(param));
     }
+
+    @ApiOperation(value = "订单上报")
+    @PutMapping(value = "/call/back")
+    @PreAuthorize(permissionKey = "sdk:order:callBack")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> callBack(@RequestParam String orderId) {
+        return ResultVO.ok(orderService.callBack(orderId));
+    }
 }

+ 67 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/Impl/OrderServiceImpl.java

@@ -2,19 +2,30 @@ package com.zanxiang.manage.service.Impl;
 
 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.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.advertising.oceanengine.track.base.pojo.PlatformServer;
+import com.zanxiang.advertising.oceanengine.track.base.pojo.dto.AppOrderRpcDTO;
+import com.zanxiang.advertising.oceanengine.track.base.pojo.rpc.IAppOrderRpc;
+import com.zanxiang.advertising.oceanengine.track.base.pojo.vo.AppReportLogRpcVO;
+import com.zanxiang.common.enums.CallBackEnum;
 import com.zanxiang.common.enums.PayDeviceEnum;
+import com.zanxiang.common.enums.PayWayEnum;
+import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.utils.bean.BeanUtils;
 import com.zanxiang.manage.domain.dto.*;
 import com.zanxiang.manage.domain.params.OrderParam;
 import com.zanxiang.manage.domain.params.UserOrderListParam;
 import com.zanxiang.manage.domain.vo.*;
 import com.zanxiang.manage.service.*;
+import com.zanxiang.module.util.JsonUtil;
+import com.zanxiang.module.util.pojo.ResultVO;
 import com.zanxiang.mybatis.entity.Order;
 import com.zanxiang.mybatis.mapper.OrderMapper;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -58,6 +69,62 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Autowired
     private PayWayService payWayService;
 
+    @Autowired
+    private OrderService orderService;
+
+    @DubboReference(providedBy = PlatformServer.SERVER_DUBBO_NAME)
+    private IAppOrderRpc appOrderRpc;
+
+    /**
+     * 订单上报
+     *
+     * @param orderId : 订单id
+     * @return : 返回上报结果
+     */
+    @Override
+    public Boolean callBack(String orderId) {
+        Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderId, orderId));
+        if (order == null) {
+            throw new BaseException("参数错误, 订单信息不存在");
+        }
+        if (Objects.equals(order.getCallBackStatus(), CallBackEnum.SUCCESS_CALL_BACK.getCallBackStatus())) {
+            throw new BaseException("订单已经上报, 请勿重复操作");
+        }
+        AppOrderRpcDTO dto = AppOrderRpcDTO.builder()
+                .appKey(String.valueOf(order.getGameId()))
+                .orderId(order.getOrderId())
+                .userId(String.valueOf(order.getUserId()))
+                .amount(order.getAmount().multiply(new BigDecimal("100")).longValue())
+                .realAmount(order.getRealAmount().multiply(new BigDecimal("100")).longValue())
+                .tranNo(order.getMerchantOrderNo())
+                .orderStatus(order.getStatus())
+                .payType(PayWayEnum.getByPayType(order.getPayWayId()))
+                .payTime(order.getPayTime())
+                .createTime(order.getCreateTime())
+                .build();
+        //调接口
+        ResultVO<AppReportLogRpcVO> result;
+        try {
+            result = appOrderRpc.order(dto);
+        } catch (Exception e) {
+            log.error("订单回传上报异常, order : {}, e : {}", JsonUtil.toString(order), e.getMessage());
+            throw new BaseException("订单回传上报异常");
+        }
+        log.error("订单回传结果, orderId : {}, result : {}", order.getOrderId(), JsonUtil.toString(result));
+        String adId = "AD_ID";
+        Integer callBackStatus = CallBackEnum.FAIL_CALL_BACK.getCallBackStatus();
+        //成功
+        if (result.isSuccess() && result.getData() != null && result.getData().getAid() != null) {
+            adId = result.getData().getAid().toString();
+            callBackStatus = CallBackEnum.SUCCESS_CALL_BACK.getCallBackStatus();
+        }
+        //更新数据库
+        return orderService.update(new LambdaUpdateWrapper<Order>()
+                .set(Order::getAdId, adId)
+                .set(Order::getCallBackStatus, callBackStatus)
+                .eq(Order::getOrderId, order.getOrderId()));
+    }
+
     /**
      * 获取用户下单记录
      *

+ 8 - 0
game-module/game-manage/src/main/java/com/zanxiang/manage/service/OrderService.java

@@ -15,6 +15,14 @@ import com.zanxiang.mybatis.entity.Order;
  */
 public interface OrderService extends IService<Order> {
 
+    /**
+     * 订单上报
+     *
+     * @param orderId : 订单id
+     * @return : 返回上报结果
+     */
+    Boolean callBack(String orderId);
+
     /**
      * 获取用户下单记录
      *

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

@@ -7,12 +7,12 @@ import com.zanxiang.advertising.oceanengine.track.base.pojo.dto.UserRegisterRpcD
 import com.zanxiang.advertising.oceanengine.track.base.pojo.rpc.IAppOrderRpc;
 import com.zanxiang.advertising.oceanengine.track.base.pojo.rpc.IAppUserRpc;
 import com.zanxiang.advertising.oceanengine.track.base.pojo.vo.AppReportLogRpcVO;
+import com.zanxiang.common.enums.CallBackEnum;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.pojo.ResultVO;
 import com.zanxiang.mybatis.entity.Order;
 import com.zanxiang.mybatis.entity.User;
 import com.zanxiang.sdk.domain.dto.PlatformOrderDTO;
-import com.zanxiang.sdk.enums.CallBackEnum;
 import com.zanxiang.sdk.enums.OsTypeEnum;
 import com.zanxiang.sdk.enums.PayTypeEnum;
 import com.zanxiang.sdk.service.CallBackService;

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

@@ -2,6 +2,7 @@ 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.common.enums.CallBackEnum;
 import com.zanxiang.common.enums.OrderStateEnum;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.common.utils.bean.BeanUtils;
@@ -11,7 +12,6 @@ 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.enums.CallBackEnum;
 import com.zanxiang.sdk.listener.OrderPaySuccessEvent;
 import com.zanxiang.sdk.service.*;
 import lombok.extern.slf4j.Slf4j;