Ver código fonte

订单创建/支付/取消/详情获取逻辑开发

xufeng 2 anos atrás
pai
commit
85cbc9a68f
20 arquivos alterados com 886 adições e 220 exclusões
  1. 24 0
      game-module/game-common/src/main/java/com/zanxiang/common/enums/OrderStateEnum.java
  2. 13 0
      game-module/game-sdk/GameApplicationTests.java
  3. 4 0
      game-module/game-sdk/pom.xml
  4. 96 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/config/MybatisPlusConfig.java
  5. 0 37
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/DemoController.java
  6. 168 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/bo/PlatformOrderBO.java
  7. 160 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/PlatformOrderDTO.java
  8. 0 43
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/entity/Demo.java
  9. 7 15
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/entity/Order.java
  10. 0 30
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/vo/DemoVO.java
  11. 158 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/vo/PlatformOrderVO.java
  12. 0 62
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/mapper/DemoMapper.java
  13. 2 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/mapper/OrderMapper.java
  14. 0 15
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/DemoService.java
  15. 0 18
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/DemoServiceImpl.java
  16. 167 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PlatformOrderServiceImpl.java
  17. 32 0
      game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/PlatformOrderService.java
  18. 16 0
      game-module/game-sdk/src/test/java/com/zanxiang/sdk/SDKApplicationTests.java
  19. 38 0
      game-module/game-sdk/src/test/java/com/zanxiang/sdk/orderTests.java
  20. 1 0
      game-module/pom.xml

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

@@ -0,0 +1,24 @@
+package com.zanxiang.common.enums;
+
+public enum OrderStateEnum {
+    NO_PAY(1, "待支付"),
+    SUCCESS(2, "支付成功"),
+    CANCEL(-1, "取消");
+
+    OrderStateEnum(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    private final Integer code;
+
+    private final String msg;
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}

+ 13 - 0
game-module/game-sdk/GameApplicationTests.java

@@ -0,0 +1,13 @@
+package com.hzshengmel.game;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class GameApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}

+ 4 - 0
game-module/game-sdk/pom.xml

@@ -16,5 +16,9 @@
             <artifactId>game-common</artifactId>
             <version>${game-common.vertion}</version>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 96 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/config/MybatisPlusConfig.java

@@ -0,0 +1,96 @@
+package com.zanxiang.sdk.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.cache.CacheKey;
+import org.apache.ibatis.executor.Executor;
+import org.apache.ibatis.executor.statement.StatementHandler;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.session.ResultHandler;
+import org.apache.ibatis.session.RowBounds;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+/**
+ * @Author wcc
+ * @Date 2020/9/11 9:30
+ * @Version 1.0
+ * @Description
+ */
+@Configuration
+@EnableTransactionManagement
+@MapperScan("com.zanxiangnet.manage.mapper")
+public class MybatisPlusConfig {
+
+    /**
+     * 分页插件
+     */
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+        interceptor.addInnerInterceptor(new DatascopeInterceptor());
+        return interceptor;
+    }
+
+    @Slf4j
+    public static class DatascopeInterceptor implements InnerInterceptor {
+        /**
+         * {@link Executor#query(MappedStatement, Object, RowBounds, ResultHandler, CacheKey, BoundSql)} 操作前置处理
+         * <p>
+         * 改改sql啥的
+         *
+         * @param executor      Executor(可能是代理对象)
+         * @param ms            MappedStatement
+         * @param parameter     parameter
+         * @param rowBounds     rowBounds
+         * @param resultHandler resultHandler
+         * @param boundSql      boundSql
+         */
+        @Override
+        public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
+            /*System.out.println("-- beforeQuery --");
+            try {
+                Select select = (Select) CCJSqlParserUtil.parse(boundSql.getSql());
+                SelectBody selectBody = select.getSelectBody();
+                if (selectBody instanceof PlainSelect) {
+                    PlainSelect plainSelect = (PlainSelect) selectBody;
+                    List<OrderByElement> orderByElements = plainSelect.getOrderByElements();
+                    System.out.println(select.toString());
+                } else if (selectBody instanceof SetOperationList) {
+                    SetOperationList setOperationList = (SetOperationList) selectBody;
+                    List<OrderByElement> orderByElements = setOperationList.getOrderByElements();
+                    System.out.println(select.toString());
+                } else if (selectBody instanceof WithItem) {
+                    // todo: don't known how to resole
+                    System.out.println(selectBody);
+                }
+            } catch (JSQLParserException e) {
+                log.warn("failed to parse sql, exception:\n" + e.getCause());
+            }*/
+        }
+
+        /**
+         * {@link StatementHandler#prepare(Connection, Integer)} 操作前置处理
+         * <p>
+         * 改改sql啥的
+         *
+         * @param sh                 StatementHandler(可能是代理对象)
+         * @param connection         Connection
+         * @param transactionTimeout transactionTimeout
+         */
+        @Override
+        public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) {
+            //System.out.println("-- beforePrepare --");
+        }
+    }
+}

+ 0 - 37
game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/DemoController.java

@@ -1,37 +0,0 @@
-package com.zanxiang.sdk.controller;
-
-import com.zanxiang.common.domain.ResultVo;
-import com.zanxiang.common.utils.bean.BeanUtils;
-import com.zanxiang.sdk.domain.entity.Demo;
-import com.zanxiang.sdk.domain.vo.DemoVO;
-import com.zanxiang.sdk.service.DemoService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * demo示例
- *
- * @author xufeng
- * @date 2022-05-31 17:06
- */
-@Api(tags = "demo示例")
-@RestController
-@RequestMapping("/sdkdemo")
-public class DemoController {
-
-    @Autowired
-    private DemoService demoService;
-
-    @GetMapping("/info")
-    @ApiOperation("/info")
-    public ResultVo<DemoVO> getDemo(@RequestParam(name = "id", defaultValue = "1", required = false) String id) {
-        Demo demo = demoService.getById(id);
-        return ResultVo.ok(BeanUtils.copy(demo, DemoVO.class));
-    }
-
-}

+ 168 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/bo/PlatformOrderBO.java

@@ -0,0 +1,168 @@
+package com.zanxiang.sdk.domain.bo;
+
+import lombok.Data;
+import org.springframework.lang.NonNull;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class PlatformOrderBO {
+    private String id;
+
+    /**
+     * cpId
+     */
+    private Long cpId;
+
+    /**
+     * CP订单号
+     */
+    private String cpOrderId;
+
+    /**
+     * 充值用户
+     */
+//    @NonNull
+    private Long userId;
+
+    /**
+     * 游戏玩家ID
+     */
+    private Long mgUserId;
+
+    /**
+     * 游戏ID
+     */
+//    @NonNull
+    private Long gameId;
+
+    /**
+     * 货物总价
+     */
+//    @NonNull
+    private BigDecimal amount;
+
+    /**
+     * 实际支付金额
+     */
+    private BigDecimal realAmount;
+
+    /**
+     * 游戏商品ID
+     */
+    private String productId;
+
+    /**
+     * 游戏商品数量
+     */
+//    @NonNull
+    private Integer productCnt;
+
+    /**
+     * 游戏商品名称
+     */
+//    @NonNull
+    private String productName;
+
+    /**
+     * 优惠券抵扣
+     */
+    private BigDecimal couponAmount;
+
+    /**
+     * 平台币使用金额
+     */
+    private BigDecimal ptbAmount;
+
+    /**
+     * 游戏币使用余额
+     */
+    private BigDecimal gmAmount;
+
+    /**
+     * 使用积分
+     */
+    private Integer integral;
+
+    /**
+     * 使用积分抵多少钱
+     */
+    private BigDecimal integralMoney;
+
+    /**
+     * 返利数量 默认为0
+     */
+    private BigDecimal rebateAmount;
+
+    /**
+     * 支付平台返回交易订单号
+     */
+    private String merchantOrderNo;
+
+    /**
+     * 支付状态,1待支付,2 支付成功,3 已取消
+     */
+    private Integer status;
+
+    /**
+     * 支付方式
+     */
+    private String gamePaywayId;
+
+    /**
+     * 支付时间
+     */
+    private Date payTime;
+
+    /**
+     * 通知次数
+     */
+    private Integer cpNotifyCnt;
+
+    /**
+     * 最近通知时间
+     */
+    private Long lastCpNotifyTime;
+
+    /**
+     * 客服处理: 2正常; 1纠纷
+     */
+    private Integer isHandle;
+
+    /**
+     * 是否已分成  1未分成 2 已分成
+     */
+    private Integer isDistribute;
+
+    /**
+     * CP通知状态,1为待处理,2为成功,3为失败
+     */
+    private Integer cpStatus;
+
+    /**
+     * CP附加参数
+     */
+    private String ext;
+
+    /**
+     * 用户备注
+     */
+    private String memNote;
+
+    /**
+     * 管理员备注
+     */
+    private String adminNote;
+
+    /**
+     * 订单成功备注信息
+     */
+    private String remark;
+
+    /**
+     * 渠道
+     */
+    private Long channel;
+
+}

+ 160 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/PlatformOrderDTO.java

@@ -0,0 +1,160 @@
+package com.zanxiang.sdk.domain.dto;
+
+import net.sf.jsqlparser.expression.DateTimeLiteralExpression;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class PlatformOrderDTO {
+    private Long id;
+
+    /**
+     * cpId
+     */
+    private Long cpId;
+
+    /**
+     * CP订单号
+     */
+    private String cpOrderId;
+
+    /**
+     * 充值用户
+     */
+    private Long userId;
+
+    /**
+     * 游戏玩家ID
+     */
+    private Long mgUserId;
+
+    /**
+     * 游戏ID
+     */
+    private Long gameId;
+
+    /**
+     * 货物总价
+     */
+    private BigDecimal amount;
+
+    /**
+     * 实际支付金额
+     */
+    private BigDecimal realAmount;
+
+    /**
+     * 游戏商品ID
+     */
+    private String productId;
+
+    /**
+     * 游戏商品数量
+     */
+    private Integer productCnt;
+
+    /**
+     * 游戏商品名称
+     */
+    private String productName;
+
+    /**
+     * 优惠券抵扣
+     */
+    private BigDecimal couponAmount;
+
+    /**
+     * 平台币使用金额
+     */
+    private BigDecimal ptbAmount;
+
+    /**
+     * 游戏币使用余额
+     */
+    private BigDecimal gmAmount;
+
+    /**
+     * 使用积分
+     */
+    private Integer integral;
+
+    /**
+     * 使用积分抵多少钱
+     */
+    private BigDecimal integralMoney;
+
+    /**
+     * 返利数量 默认为0
+     */
+    private BigDecimal rebateAmount;
+
+    /**
+     * 支付平台返回交易订单号
+     */
+    private String merchantOrderNo;
+
+    /**
+     * 支付状态,1待支付,2 支付成功,3 已取消
+     */
+    private Integer status;
+
+    /**
+     * 支付方式
+     */
+    private String gamePaywayId;
+
+    /**
+     * 支付时间
+     */
+    private Date payTime;
+
+    /**
+     * 通知次数
+     */
+    private Integer cpNotifyCnt;
+
+    /**
+     * 最近通知时间
+     */
+    private Date lastCpNotifyTime;
+
+    /**
+     * 客服处理: 2正常; 1纠纷
+     */
+    private Integer isHandle;
+
+    /**
+     * 是否已分成  1未分成 2 已分成
+     */
+    private Integer isDistribute;
+
+    /**
+     * CP通知状态,1为待处理,2为成功,3为失败
+     */
+    private Integer cpStatus;
+
+    /**
+     * CP附加参数
+     */
+    private String ext;
+
+    /**
+     * 用户备注
+     */
+    private String memNote;
+
+    /**
+     * 管理员备注
+     */
+    private String adminNote;
+
+    /**
+     * 订单成功备注信息
+     */
+    private String remark;
+
+    /**
+     * 渠道
+     */
+    private Long channel;
+}

+ 0 - 43
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/entity/Demo.java

@@ -1,43 +0,0 @@
-package com.zanxiang.sdk.domain.entity;
-
-import java.io.Serializable;
-
-import lombok.Data;
-import lombok.Builder;
-import lombok.NoArgsConstructor;
-import lombok.AllArgsConstructor;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.IdType;
-
-/**
- * 注释
- *
- * @author xufeng
- * @date 2022-05-31 17:06
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class Demo implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    /**
-     * 名称
-     */
-    private String name;
-
-    /**
-     * 是否启用
-     */
-    private Integer isEnable;
-
-    /**
-     * 内容
-     */
-    private String content;
-}

+ 7 - 15
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/entity/Order.java

@@ -7,6 +7,7 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.ToString;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
@@ -27,8 +28,8 @@ public class Order {
     /**
      * 自增ID
      */
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private String id;
 
     /**
      * cpId
@@ -113,12 +114,12 @@ public class Order {
     /**
      * 支付平台返回交易订单号
      */
-    private Long merchantOrderNo;
+    private String merchantOrderNo;
 
     /**
      * 支付状态,1待支付,2 支付成功,3 已取消
      */
-    private Boolean status;
+    private Integer status;
 
     /**
      * 支付方式
@@ -138,7 +139,7 @@ public class Order {
     /**
      * 最近通知时间
      */
-    private Long lastCpNotifyTime;
+    private String lastCpNotifyTime;
 
     /**
      * 客服处理: 2正常; 1纠纷
@@ -153,7 +154,7 @@ public class Order {
     /**
      * CP通知状态,1为待处理,2为成功,3为失败
      */
-    private Boolean cpStatus;
+    private Integer cpStatus;
 
     /**
      * CP附加参数
@@ -180,13 +181,4 @@ public class Order {
      */
     private Long channel;
 
-    /**
-     * 创建时间
-     */
-    private LocalDateTime createTime;
-
-    /**
-     * 更新时间
-     */
-    private LocalDateTime updateTime;
 }

+ 0 - 30
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/vo/DemoVO.java

@@ -1,30 +0,0 @@
-package com.zanxiang.sdk.domain.vo;
-
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import lombok.Data;
-
-@Data
-public class DemoVO {
-
-    private static final long serialVersionUID = 1L;
-
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long id;
-
-    /**
-     * 名称
-     */
-    private String name;
-
-    /**
-     * 是否启用
-     */
-    private Integer isEnable;
-
-    /**
-     * 内容
-     */
-    private String content;
-
-}

+ 158 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/vo/PlatformOrderVO.java

@@ -0,0 +1,158 @@
+package com.zanxiang.sdk.domain.vo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class PlatformOrderVO {
+    private Long id;
+
+    /**
+     * cpId
+     */
+    private Long cpId;
+
+    /**
+     * CP订单号
+     */
+    private String cpOrderId;
+
+    /**
+     * 充值用户
+     */
+    private Long userId;
+
+    /**
+     * 游戏玩家ID
+     */
+    private Long mgUserId;
+
+    /**
+     * 游戏ID
+     */
+    private Long gameId;
+
+    /**
+     * 货物总价
+     */
+    private BigDecimal amount;
+
+    /**
+     * 实际支付金额
+     */
+    private BigDecimal realAmount;
+
+    /**
+     * 游戏商品ID
+     */
+    private String productId;
+
+    /**
+     * 游戏商品数量
+     */
+    private Integer productCnt;
+
+    /**
+     * 游戏商品名称
+     */
+    private String productName;
+
+    /**
+     * 优惠券抵扣
+     */
+    private BigDecimal couponAmount;
+
+    /**
+     * 平台币使用金额
+     */
+    private BigDecimal ptbAmount;
+
+    /**
+     * 游戏币使用余额
+     */
+    private BigDecimal gmAmount;
+
+    /**
+     * 使用积分
+     */
+    private Integer integral;
+
+    /**
+     * 使用积分抵多少钱
+     */
+    private BigDecimal integralMoney;
+
+    /**
+     * 返利数量 默认为0
+     */
+    private BigDecimal rebateAmount;
+
+    /**
+     * 支付平台返回交易订单号
+     */
+    private Long merchantOrderNo;
+
+    /**
+     * 支付状态,1待支付,2 支付成功,3 已取消
+     */
+    private Integer status;
+
+    /**
+     * 支付方式
+     */
+    private String gamePaywayId;
+
+    /**
+     * 支付时间
+     */
+    private Date payTime;
+
+    /**
+     * 通知次数
+     */
+    private Integer cpNotifyCnt;
+
+    /**
+     * 最近通知时间
+     */
+    private Long lastCpNotifyTime;
+
+    /**
+     * 客服处理: 2正常; 1纠纷
+     */
+    private Integer isHandle;
+
+    /**
+     * 是否已分成  1未分成 2 已分成
+     */
+    private Integer isDistribute;
+
+    /**
+     * CP通知状态,1为待处理,2为成功,3为失败
+     */
+    private Integer cpStatus;
+
+    /**
+     * CP附加参数
+     */
+    private String ext;
+
+    /**
+     * 用户备注
+     */
+    private String memNote;
+
+    /**
+     * 管理员备注
+     */
+    private String adminNote;
+
+    /**
+     * 订单成功备注信息
+     */
+    private String remark;
+
+    /**
+     * 渠道
+     */
+    private Long channel;
+}

+ 0 - 62
game-module/game-sdk/src/main/java/com/zanxiang/sdk/mapper/DemoMapper.java

@@ -1,62 +0,0 @@
-package com.zanxiang.sdk.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.zanxiang.sdk.domain.entity.Demo;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 注释 Mapper
- *
- * @author xufeng
- * @date 2022-05-31 17:06
- */
-@Mapper
-public interface DemoMapper extends BaseMapper<Demo> {
-
-    /**
-     * 根据主键id查询
-     *
-     * @param id
-     * @return 记录信息
-     */
-    Demo selectByPrimaryKey(Long id);
-
-    /**
-     * 根据主键删除数据
-     *
-     * @param id
-     * @return 数量
-     */
-    int deleteByPrimaryKey(Long id);
-
-    /**
-     * 插入数据库记录(不建议使用)
-     *
-     * @param record
-     */
-    int insert(Demo record);
-
-    /**
-     * 插入数据库记录(建议使用)
-     *
-     * @param record 插入数据
-     * @return 插入数量
-     */
-    int insertSelective(Demo record);
-
-    /**
-     * 修改数据(推荐使用)
-     *
-     * @param record 更新值
-     * @return 更新数量
-     */
-    int updateByPrimaryKeySelective(Demo record);
-
-    /**
-     * 根据主键更新数据
-     *
-     * @param record 更新值
-     * @return 更新数量
-     */
-    int updateByPrimaryKey(Demo record);
-}

+ 2 - 0
game-module/game-sdk/src/main/java/com/zanxiang/sdk/mapper/OrderMapper.java

@@ -2,11 +2,13 @@ package com.zanxiang.sdk.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zanxiang.sdk.domain.entity.Order;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @author : lingfeng
  * @time : 2022-06-06
  * @description : ${description}
  */
+@Transactional
 public interface OrderMapper extends BaseMapper<Order> {
 }

+ 0 - 15
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/DemoService.java

@@ -1,15 +0,0 @@
-package com.zanxiang.sdk.service;
-
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.zanxiang.sdk.domain.entity.Demo;
-
-/**
- * 服务类接口
- *
- * @author xufeng
- * @date 2022-05-31 17:06
- */
-public interface DemoService extends IService<Demo> {
-
-}

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

@@ -1,18 +0,0 @@
-package com.zanxiang.sdk.service.Impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zanxiang.sdk.domain.entity.Demo;
-import com.zanxiang.sdk.mapper.DemoMapper;
-import com.zanxiang.sdk.service.DemoService;
-import org.springframework.stereotype.Service;
-
-/**
- * 服务实现类
- *
- * @author xufeng
- * @date 2022-05-31 17:06
- */
-@Service
-public class DemoServiceImpl extends ServiceImpl<DemoMapper, Demo> implements DemoService {
-
-}

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

@@ -0,0 +1,167 @@
+package com.zanxiang.sdk.service.Impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.common.enums.OrderStateEnum;
+import com.zanxiang.common.utils.StringUtils;
+import com.zanxiang.common.utils.bean.BeanUtils;
+import com.zanxiang.sdk.domain.bo.PlatformOrderBO;
+import com.zanxiang.sdk.domain.dto.PlatformOrderDTO;
+import com.zanxiang.sdk.domain.entity.Order;
+import com.zanxiang.sdk.mapper.OrderMapper;
+import com.zanxiang.sdk.service.PlatformOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.extension.ParameterResolutionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+
+@Slf4j
+@Service
+public class PlatformOrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements PlatformOrderService {
+    protected final Logger logger = LoggerFactory.getLogger(PlatformOrderServiceImpl.class);
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public String create(PlatformOrderBO platformOrderBO) {
+        try {
+            logger.info("生成订单请求参数 platformOrderBO:{}", platformOrderBO);
+            this.checkParam(platformOrderBO, "create");
+            Order data = BeanUtils.copy(platformOrderBO, Order.class);
+            if (save(data)) {
+                return data.getId();
+            }
+        } catch (Exception e) {
+            logger.error("生成订单失败 platformOrderBO:{}, error:{}", platformOrderBO, e);
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean pay(PlatformOrderBO platformOrderBO) {
+        logger.info("订单支付请求参数 platformOrderBO:{}", platformOrderBO);
+        try {
+            this.checkParam(platformOrderBO, "pay");
+            Order order = getOne(new LambdaQueryWrapper<Order>().eq(Order::getId, platformOrderBO.getId()));
+            if (!order.getStatus().equals(OrderStateEnum.NO_PAY.getCode())) {
+                throw new ParameterResolutionException("订单状态非待支付");
+            }
+            order.setRealAmount(platformOrderBO.getRealAmount());
+            order.setMerchantOrderNo(platformOrderBO.getMerchantOrderNo());
+            order.setStatus(OrderStateEnum.SUCCESS.getCode());
+            order.setGamePaywayId(platformOrderBO.getGamePaywayId());
+            order.setPayTime(LocalDateTime.now());
+            order.setMemNote(StringUtils.isEmpty(platformOrderBO.getMemNote()) ? null : platformOrderBO.getMemNote());
+            logger.info("订单支付提交数据 data:{}", order);
+            LambdaUpdateWrapper<Order> wrapper = Wrappers.lambdaUpdate(Order.class)
+                    .eq(Order::getId, platformOrderBO.getId())
+                    .eq(Order::getUserId, platformOrderBO.getUserId())
+                    .setEntity(order);
+            return super.update(wrapper);
+        } catch (ParameterResolutionException e) {
+            logger.error("订单支付失败 platformOrderBO:{}, error:{}", platformOrderBO, e);
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Boolean cancel(PlatformOrderBO platformOrderBO) {
+        logger.info("订单支付取消请求参数 platformOrderBO:{}", platformOrderBO);
+        try {
+            this.checkParam(platformOrderBO, "cancel");
+            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());
+            logger.info("订单取消提交数据 data:{}", order);
+            LambdaUpdateWrapper<Order> wrapper = Wrappers.lambdaUpdate(Order.class)
+                    .eq(Order::getId, platformOrderBO.getId())
+                    .setEntity(order);
+            return super.update(wrapper);
+        } catch (Exception e) {
+            logger.error("订单取消失败 platformOrderBO:{}, error:{}", platformOrderBO, e);
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public PlatformOrderDTO info(Long id) {
+        Order order = getOne(new LambdaQueryWrapper<Order>().eq(Order::getId, id));
+        return BeanUtils.copy(order, PlatformOrderDTO.class);
+    }
+
+    /**
+     * 检查订单创建参数
+     *
+     * @param platformOrderBO
+     * @return
+     */
+    private Boolean checkParam(PlatformOrderBO platformOrderBO, String active) {
+        switch (active) {
+            case "create":
+                if (platformOrderBO.getCpId() == null) {
+                    throw new NullPointerException("CpId");
+                }
+                if (platformOrderBO.getUserId() == null) {
+                    throw new NullPointerException("UserId");
+                }
+                if (platformOrderBO.getMgUserId() == null) {
+                    throw new NullPointerException("MgUserId");
+                }
+                if (StringUtils.isEmpty(platformOrderBO.getProductId())) {
+                    throw new NullPointerException("ProductId");
+                }
+                if (StringUtils.isEmpty(platformOrderBO.getProductName())) {
+                    throw new NullPointerException("ProductName");
+                }
+                if (platformOrderBO.getProductCnt() == null) {
+                    throw new NullPointerException("ProductCnt");
+                }
+                if (platformOrderBO.getAmount() == null) {
+                    throw new NullPointerException("Amount");
+                }
+                break;
+            case "pay":
+                if (platformOrderBO.getId() == null) {
+                    throw new NullPointerException("id");
+                }
+                if (platformOrderBO.getStatus() == 0) {
+                    throw new NullPointerException("Status");
+                }
+                if (StringUtils.isEmpty(platformOrderBO.getGamePaywayId())) {
+                    throw new NullPointerException("GamePaywayId");
+                }
+                if (platformOrderBO.getRealAmount() == null) {
+                    throw new NullPointerException("RealAmount");
+                }
+                if (StringUtils.isEmpty(platformOrderBO.getMerchantOrderNo())) {
+                    throw new NullPointerException("MerchantOrderNo");
+                }
+
+                break;
+
+            case "cancel":
+                if (platformOrderBO.getId() == null) {
+                    throw new NullPointerException("id");
+                }
+
+                break;
+            default:
+                return false;
+        }
+        return true;
+    }
+
+
+}

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

@@ -0,0 +1,32 @@
+package com.zanxiang.sdk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.sdk.SDKApplication;
+import com.zanxiang.sdk.domain.bo.PlatformOrderBO;
+import com.zanxiang.sdk.domain.dto.PlatformOrderDTO;
+import com.zanxiang.sdk.domain.entity.Order;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest(classes = {SDKApplication.class})
+public interface PlatformOrderService extends IService<Order> {
+
+    /**
+     * 订单创建
+     *
+     * @param platformOrderBO
+     * @return 订单id
+     */
+    String create(PlatformOrderBO platformOrderBO);
+
+    /**
+     * 订单支付
+     *
+     * @param platformOrderBO
+     * @return true/false
+     */
+    Boolean pay(PlatformOrderBO platformOrderBO);
+
+    Boolean cancel(PlatformOrderBO platformOrderBO);
+
+    PlatformOrderDTO info(Long id);
+}

+ 16 - 0
game-module/game-sdk/src/test/java/com/zanxiang/sdk/SDKApplicationTests.java

@@ -0,0 +1,16 @@
+package com.zanxiang.sdk;
+
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+class SDKApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}

+ 38 - 0
game-module/game-sdk/src/test/java/com/zanxiang/sdk/orderTests.java

@@ -0,0 +1,38 @@
+package com.zanxiang.sdk;
+
+import com.zanxiang.sdk.domain.bo.PlatformOrderBO;
+import com.zanxiang.sdk.service.Impl.PlatformOrderServiceImpl;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.lang.reflect.Method;
+import java.math.BigDecimal;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class orderTests extends SDKApplicationTests {
+//    @Autowired
+//    private PlatformOrderServiceImpl platformOrderService;
+
+    @Test
+    public void orderCreate() {
+        String typeName = this.getClass().getCanonicalName();
+        System.out.println(typeName);
+        PlatformOrderBO bo = new PlatformOrderBO();
+        bo.setCpId(1L);
+        bo.setCpOrderId("100001");
+        bo.setUserId(1L);
+        bo.setMgUserId(1L);
+        bo.setGameId(1L);
+        bo.setAmount(new BigDecimal("0.01"));
+        bo.setProductId("cx00001");
+        bo.setProductCnt(1);
+        bo.setProductName("测试商品1");
+//        Long orderId = platformOrderService.create(bo);
+//        System.out.println(orderId);
+//        System.out.println("1111");
+    }
+}

+ 1 - 0
game-module/pom.xml

@@ -36,6 +36,7 @@
             <version>${swagger2.ui.version}</version>
         </dependency>
 
+
     </dependencies>
 
 </project>