订单微服务(5)-1024电商平台项目技术选择和创 建聚合工程项目【工业级PaaS云平台+SpringCloudAlibaba+JDK11综合项目实战】

2022-09-16 16:37:38 浏览数 (1)

第二十章 1024电商平台-订单微服务开发

第1集 1024电商平台-订单微服务功能需求介绍

简介:订单微服务功能需求介绍

  • 核心接口-下单
  • 订单微服务涉及的功能知识点
    • 创建订单和防重提交
    • 多个微服务之间通讯-分布式事务选择
    • 商品库存锁定和回收
    • 优惠券使用锁定和回收
    • 支付宝支付对接
    • 优惠券 商品订单验价
    • 多通道支付和设计整合
第2集 1024电商平台-订单微服务数据库表讲解

简介:订单微服务数据库表讲解

  • 订单表
代码语言:javascript复制
CREATE TABLE `product_order` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `out_trade_no` varchar(64) DEFAULT NULL COMMENT '订单唯一标识',
  `state` varchar(11) DEFAULT NULL COMMENT 'NEW 未支付订单,PAY已经支付订单,CANCEL超时取消订单',
  `create_time` datetime DEFAULT NULL COMMENT '订单生成时间',
  `total_amount` decimal(16,2) DEFAULT NULL COMMENT '订单总金额',
  `pay_amount` decimal(16,2) DEFAULT NULL COMMENT '订单实际支付价格',
  `pay_type` varchar(64) DEFAULT NULL COMMENT '支付类型,微信-银行-支付宝',
  `nickname` varchar(64) DEFAULT NULL COMMENT '昵称',
  `head_img` varchar(524) DEFAULT NULL COMMENT '头像',
  `user_id` int(11) DEFAULT NULL COMMENT '用户id',
  `del` int(5) DEFAULT '0' COMMENT '0表示未删除,1表示已经删除',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `order_type` varchar(32) DEFAULT NULL COMMENT '订单类型 DAILY普通单,PROMOTION促销订单',
  `receiver_address` varchar(1024) DEFAULT NULL COMMENT '收货地址 json存储',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2439 DEFAULT CHARSET=utf8mb4;
  • 订单项表
代码语言:javascript复制
CREATE TABLE `product_order_item` (
  `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT,
  `product_order_id` bigint(11) DEFAULT NULL COMMENT '订单号',
  `out_trade_no` varchar(32) DEFAULT NULL,
  `product_id` bigint(11) DEFAULT NULL COMMENT '产品id',
  `product_name` varchar(128) DEFAULT NULL COMMENT '商品名称',
  `product_img` varchar(524) DEFAULT NULL COMMENT '商品图片',
  `buy_num` int(11) DEFAULT NULL COMMENT '购买数量',
  `create_time` datetime DEFAULT NULL,
  `total_amount` decimal(16,2) DEFAULT NULL COMMENT '购物项商品总价格',
  `amount` decimal(16,0) DEFAULT NULL COMMENT '购物项商品单价',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=194 DEFAULT CHARSET=utf8mb4;
第3集 订单微服务 MybatisPlusGenerator代码自动生成工具

简介:Mybatis-plus-generator代码自动化生成微服务相关类

  • 配置代码生成(标记TODO的记得修改)
代码语言:javascript复制
public class MyBatisPlusGenerator {

    public static void main(String[] args) {
        //1. 全局配置
        GlobalConfig config = new GlobalConfig();

                // 作者
                config.setAuthor("二当家小D")
                // 生成路径,最好使用绝对路径,window路径是不一样的
                //TODO  TODO  TODO  TODO
                .setOutputDir("/Users/xdclass/Desktop/demo/src/main/java")
                // 文件覆盖
                .setFileOverride(true)
                // 主键策略
                .setIdType(IdType.AUTO)

                .setDateType(DateType.ONLY_DATE)
                // 设置生成的service接口的名字的首字母是否为I,默认Service是以I开头的
                .setServiceName("%sService")

                //实体类结尾名称
                .setEntityName("%sDO")

                //生成基本的resultMap
                .setBaseResultMap(true)

                //不使用AR模式
                .setActiveRecord(false)

                //生成基本的SQL片段
                .setBaseColumnList(true);

        //2. 数据源配置
        DataSourceConfig dsConfig = new DataSourceConfig();
        // 设置数据库类型
        dsConfig.setDbType(DbType.MYSQL)
                .setDriverName("com.mysql.cj.jdbc.Driver")
                //TODO  TODO  TODO  TODO
                .setUrl("jdbc:mysql://127.0.0.1:3306/xdclass_order?useSSL=false")
                .setUsername("root")
                .setPassword("xdclass.net");

        //3. 策略配置globalConfiguration中
        StrategyConfig stConfig = new StrategyConfig();

        //全局大写命名
        stConfig.setCapitalMode(true)
                // 数据库表映射到实体的命名策略
                .setNaming(NamingStrategy.underline_to_camel)

                //使用lombok
                .setEntityLombokModel(true)

                //使用restcontroller注解
                .setRestControllerStyle(true)

                // 生成的表, 支持多表一起生成,以数组形式填写
                //TODO  TODO  TODO  TODO
                .setInclude("product_order","product_order_item");

        //4. 包名策略配置
        PackageConfig pkConfig = new PackageConfig();
        pkConfig.setParent("net.xdclass")
                .setMapper("mapper")
                .setService("service")
                .setController("controller")
                .setEntity("model")
                .setXml("mapper");

        //5. 整合配置
        AutoGenerator ag = new AutoGenerator();
        ag.setGlobalConfig(config)
                .setDataSource(dsConfig)
                .setStrategy(stConfig)
                .setPackageInfo(pkConfig);

        //6. 执行操作
        ag.execute();
        System.out.println("======= 小滴课堂 Done 相关代码生成完毕  ========");
    }
}
  • 导入生成好的代码
    • model (为啥不放common项目,如果是确定每个服务都用到的依赖或者类才放到common项目)
    • mapper 类接口拷贝
    • resource/mapper文件夹 xml脚本拷贝
    • controller
    • service 不拷贝
第4集 订单微服务项目基本配置整合-拦截器-枚举类配置

简介:项目相关配置整合和拦截器配置

  • SpringBoot项目启动类和配置文件配置
  • 拦截器配置
  • 枚举类配置
代码语言:javascript复制
/**
 * 客户端枚举类
 */
public enum ClientType {

    /**
     * 原生应用
     */
    APP,

    /**
     * 电脑端
     */
    PC,

    /**
     * 网页
     */
    H5
}


public enum ProductOrderPayTypeEnum {

    /**
     * 微信支付
     */
    WECHAT,

    /**
     * 支付支付
     */
    ALIPAY,

    /**
     * 银行卡支付
     */
    BANK;

}

public enum ProductOrderStateEnum {

    /**
     * 未支付订单
     */
    NEW,


    /**
     * 已经支付订单
     */
    PAY,

    /**
     * 超时取消订单
     */
    CANCEL;

}

public enum ProductOrderTypeEnum {

    /**
     * 普通订单
     */
    DAILY,


    /**
     * 促销订单
     */
    PROMOTION;

}
第5集 订单微服务-创建订单接口介绍-request类

简介:订单微服务-创建订单接口介绍和request类型编写

  • 下单逻辑
    • 二步:创建订单-》调用支付(京东)
    • 一步:创建订单并调用支付(手淘)
  • 创建订单
    • controller编写
第6集 订单微服务-创建订单service伪代码编写

简介:订单微服务-创建订单伪代码编写

  • service编写伪代码
    • 防重提交
    • 用户微服务-确认收货地址
    • 商品微服务-获取最新购物项和价格
    • 订单验价
      • 优惠券微服务-获取优惠券
      • 验证价格
    • 锁定优惠券
    • 锁定商品库存
    • 创建订单对象
    • 创建子订单对象
    • 发送延迟消息-用于自动关单
    • 创建支付信息-对接三方支付

0 人点赞