15 | * 16 | *
17 | * 18 | * @author WXW 19 | * @since 2020-04-27 20 | */ 21 | @Data 22 | @EqualsAndHashCode(callSuper = false) 23 | @Accessors(chain = true) 24 | @TableName("tb_address") 25 | public class Address implements Serializable { 26 | 27 | private static final long serialVersionUID=1L; 28 | 29 | /** 30 | * 编号 31 | */ 32 | @TableId(value = "id", type = IdType.AUTO) 33 | private Long id; 34 | 35 | /** 36 | * 用户ID 37 | */ 38 | @TableField("userId") 39 | private Long userId; 40 | 41 | /** 42 | * 收货人 43 | */ 44 | private String name; 45 | 46 | /** 47 | * 收货电话 48 | */ 49 | private String phone; 50 | 51 | /** 52 | * 邮编 53 | */ 54 | private String zipcode; 55 | 56 | /** 57 | * 省 58 | */ 59 | private String province; 60 | 61 | /** 62 | * 市 63 | */ 64 | private String city; 65 | 66 | /** 67 | * 区/县 68 | */ 69 | private String district; 70 | 71 | /** 72 | * 详细地址 73 | */ 74 | private String address; 75 | 76 | /** 77 | * 是否是默认地址 78 | */ 79 | @TableField("defaultAddress") 80 | private Boolean defaultAddress; 81 | 82 | 83 | } 84 | -------------------------------------------------------------------------------- /cloud-server-order/cloud-order-interface/src/main/java/com/wxw/cloud/domain/OrderDetail.java: -------------------------------------------------------------------------------- 1 | package com.wxw.cloud.domain; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | import lombok.experimental.Accessors; 9 | 10 | import java.io.Serializable; 11 | 12 | /** 13 | *14 | * 订单详情表 15 | *
16 | * 17 | * @author WXW 18 | * @since 2020-04-27 19 | */ 20 | @Data 21 | @EqualsAndHashCode(callSuper = false) 22 | @Accessors(chain = true) 23 | @TableName("tb_order_detail") 24 | public class OrderDetail implements Serializable { 25 | 26 | private static final long serialVersionUID=1L; 27 | 28 | /** 29 | * 订单详情id 30 | */ 31 | @TableId(value = "id", type = IdType.AUTO) 32 | private Long id; 33 | 34 | /** 35 | * 订单id 36 | */ 37 | private Long orderId; 38 | 39 | /** 40 | * sku商品id 41 | */ 42 | private Long skuId; 43 | 44 | /** 45 | * 购买数量 46 | */ 47 | private Integer num; 48 | 49 | /** 50 | * 商品标题 51 | */ 52 | private String title; 53 | 54 | /** 55 | * 商品动态属性键值集 56 | */ 57 | private String ownSpec; 58 | 59 | /** 60 | * 价格,单位:分 61 | */ 62 | private Long price; 63 | 64 | /** 65 | * 商品图片 66 | */ 67 | private String image; 68 | 69 | 70 | } 71 | -------------------------------------------------------------------------------- /cloud-server-order/cloud-order-interface/src/main/java/com/wxw/cloud/domain/OrderStatus.java: -------------------------------------------------------------------------------- 1 | package com.wxw.cloud.domain; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | import lombok.experimental.Accessors; 9 | 10 | import java.io.Serializable; 11 | import java.time.LocalDateTime; 12 | 13 | /** 14 | *15 | * 订单状态表 16 | *
17 | * 18 | * @author WXW 19 | * @since 2020-04-27 20 | */ 21 | @Data 22 | @EqualsAndHashCode(callSuper = false) 23 | @Accessors(chain = true) 24 | @TableName("tb_order_status") 25 | public class OrderStatus implements Serializable { 26 | 27 | private static final long serialVersionUID=1L; 28 | 29 | /** 30 | * 初始阶段:1、未付款、未发货;初始化所有数据 31 | * 付款阶段:2、已付款、未发货;更改付款时间 32 | * 发货阶段:3、已发货,未确认;更改发货时间、物流名称、物流单号 33 | * 成功阶段:4、已确认,未评价;更改交易结束时间 34 | * 关闭阶段:5、关闭; 更改更新时间,交易关闭时间。 35 | * 评价阶段:6、已评价 36 | */ 37 | 38 | /** 39 | * 订单id 40 | */ 41 | @TableId(value = "order_id") 42 | private Long orderId; 43 | 44 | /** 45 | * 状态:1、未付款 2、已付款,未发货 3、已发货,未确认 4、交易成功 5、交易关闭 6、已评价 46 | */ 47 | private Integer status; 48 | 49 | /** 50 | * 订单创建时间 51 | */ 52 | private LocalDateTime createTime; 53 | 54 | /** 55 | * 付款时间 56 | */ 57 | private LocalDateTime paymentTime; 58 | 59 | /** 60 | * 发货时间 61 | */ 62 | private LocalDateTime consignTime; 63 | 64 | /** 65 | * 交易完成时间 66 | */ 67 | private LocalDateTime endTime; 68 | 69 | /** 70 | * 交易关闭时间 71 | */ 72 | private LocalDateTime closeTime; 73 | 74 | /** 75 | * 评价时间 76 | */ 77 | private LocalDateTime commentTime; 78 | 79 | 80 | } 81 | -------------------------------------------------------------------------------- /cloud-server-order/cloud-order-interface/src/main/java/com/wxw/cloud/domain/PayLog.java: -------------------------------------------------------------------------------- 1 | package com.wxw.cloud.domain; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | import lombok.experimental.Accessors; 9 | 10 | import java.io.Serializable; 11 | import java.time.LocalDateTime; 12 | 13 | /** 14 | *15 | * 16 | *
17 | * 18 | * @author WXW 19 | * @since 2020-04-27 20 | */ 21 | @Data 22 | @EqualsAndHashCode(callSuper = false) 23 | @Accessors(chain = true) 24 | @TableName("tb_pay_log") 25 | public class PayLog implements Serializable { 26 | 27 | private static final long serialVersionUID=1L; 28 | 29 | /** 30 | * 订单号 31 | */ 32 | @TableId(value = "order_id") 33 | private Long orderId; 34 | 35 | /** 36 | * 支付金额(分) 37 | */ 38 | private Long totalFee; 39 | 40 | /** 41 | * 用户ID 42 | */ 43 | private Long userId; 44 | 45 | /** 46 | * 支付交易号码 47 | */ 48 | private String transactionId; 49 | 50 | /** 51 | * 交易状态,1 未支付, 2已支付, 3 已退款, 4 支付错误, 5 已关闭 52 | */ 53 | private Integer status; 54 | 55 | /** 56 | * 支付方式,1 支付宝支付, 2 货到付款 57 | */ 58 | private Integer payType; 59 | 60 | /** 61 | * 银行类型 62 | */ 63 | private String bankType; 64 | 65 | /** 66 | * 创建时间 67 | */ 68 | private LocalDateTime createTime; 69 | 70 | /** 71 | * 支付时间 72 | */ 73 | private LocalDateTime payTime; 74 | 75 | /** 76 | * 关闭时间 77 | */ 78 | private LocalDateTime closedTime; 79 | 80 | /** 81 | * 退款时间 82 | */ 83 | private LocalDateTime refundTime; 84 | 85 | 86 | } 87 | -------------------------------------------------------------------------------- /cloud-server-order/cloud-order-interface/src/main/java/com/wxw/cloud/domain/SeckillOrder.java: -------------------------------------------------------------------------------- 1 | package com.wxw.cloud.domain; 2 | 3 | import com.baomidou.mybatisplus.annotation.TableName; 4 | import com.baomidou.mybatisplus.annotation.IdType; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableField; 7 | import java.io.Serializable; 8 | import lombok.Data; 9 | import lombok.EqualsAndHashCode; 10 | import lombok.experimental.Accessors; 11 | 12 | /** 13 | *14 | * 15 | *
16 | * 17 | * @author WXW 18 | * @since 2020-04-27 19 | */ 20 | @Data 21 | @EqualsAndHashCode(callSuper = false) 22 | @Accessors(chain = true) 23 | @TableName("tb_seckill_order") 24 | public class SeckillOrder implements Serializable { 25 | 26 | private static final long serialVersionUID=1L; 27 | 28 | /** 29 | * 秒杀编号 30 | */ 31 | @TableId(value = "id", type = IdType.AUTO) 32 | private Long id; 33 | 34 | /** 35 | * 秒杀用户 36 | */ 37 | @TableField("userId") 38 | private Long userId; 39 | 40 | /** 41 | * 商品ID 42 | */ 43 | @TableField("skuId") 44 | private Long skuId; 45 | 46 | /** 47 | * 订单ID 48 | */ 49 | @TableField("orderId") 50 | private Long orderId; 51 | 52 | 53 | } 54 | -------------------------------------------------------------------------------- /cloud-server-order/cloud-order-interface/src/main/java/com/wxw/cloud/domain/Stock.java: -------------------------------------------------------------------------------- 1 | package com.wxw.cloud.domain; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Data; 7 | import lombok.EqualsAndHashCode; 8 | import lombok.experimental.Accessors; 9 | 10 | import java.io.Serializable; 11 | 12 | /** 13 | *14 | * 库存表,代表库存,秒杀库存等信息 15 | *
16 | * 17 | * @author WXW 18 | * @since 2020-04-05 19 | */ 20 | @Data 21 | @EqualsAndHashCode(callSuper = false) 22 | @Accessors(chain = true) 23 | @TableName("tb_stock") 24 | public class Stock implements Serializable { 25 | 26 | private static final long serialVersionUID=1L; 27 | 28 | /** 29 | * 库存对应的商品sku id 30 | */ 31 | @TableId(value = "sku_id", type = IdType.NONE) 32 | private Long skuId; 33 | 34 | /** 35 | * 可秒杀库存 36 | */ 37 | private Integer seckillStock; 38 | 39 | /** 40 | * 秒杀总数量 41 | */ 42 | private Integer seckillTotal; 43 | 44 | /** 45 | * 库存数量 46 | */ 47 | private Integer stock; 48 | 49 | 50 | } 51 | -------------------------------------------------------------------------------- /cloud-server-order/cloud-order-service/src/main/java/com/wxw/cloud/OrderMian8089.java: -------------------------------------------------------------------------------- 1 | package com.wxw.cloud; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; 6 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 7 | 8 | /** 9 | * @Author: wxw 10 | * @create: 2020-04-24-16:56 11 | */ 12 | @EnableDiscoveryClient 13 | @SpringBootApplication 14 | public class OrderMian8089 { 15 | public static void main(String[] args) { 16 | SpringApplication.run(OrderMian8089.class,args); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /cloud-server-order/cloud-order-service/src/main/java/com/wxw/cloud/config/AliPayProperties.java: -------------------------------------------------------------------------------- 1 | package com.wxw.cloud.config; 2 | 3 | import com.alipay.api.AlipayClient; 4 | import com.alipay.api.DefaultAlipayClient; 5 | import lombok.Data; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | import lombok.ToString; 9 | import org.springframework.boot.context.properties.ConfigurationProperties; 10 | 11 | /** 12 | * @Author: wxw 13 | * @create: 2020-04-27-15:36 14 | */ 15 | @Getter 16 | @Setter 17 | @ToString 18 | @ConfigurationProperties(prefix = "wxw.pay") 19 | public class AliPayProperties { 20 | 21 | // appID 22 | private String appId; 23 | 24 | //商户公钥 25 | private String privateKey; 26 | 27 | // 支付宝公钥 28 | private String publicKey; 29 | 30 | // 支付宝异步通知结果 31 | private String notifyUrl; 32 | 33 | // 返回结果集 34 | private String returnUrl; 35 | 36 | // 签名类型 37 | private String signType; 38 | 39 | // 字符编码 40 | private String charset; 41 | 42 | // 字符类型 43 | private String format; 44 | 45 | // 网关地址 46 | private String gatewayUrl; 47 | 48 | private AlipayClient alipayClient; 49 | 50 | public AlipayClient build(){ 51 | this.alipayClient = new DefaultAlipayClient( 52 | getGatewayUrl(), 53 | getAppId(), 54 | getPrivateKey(), 55 | getFormat(), 56 | getCharset(), 57 | getPublicKey(), 58 | getSignType()); 59 | return alipayClient; 60 | } 61 | 62 | } -------------------------------------------------------------------------------- /cloud-server-order/cloud-order-service/src/main/java/com/wxw/cloud/config/JwtProperties.java: -------------------------------------------------------------------------------- 1 | package com.wxw.cloud.config; 2 | 3 | import com.wxw.cloud.tools.RsaUtils; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | import org.slf4j.Logger; 7 | import org.slf4j.LoggerFactory; 8 | import org.springframework.boot.context.properties.ConfigurationProperties; 9 | 10 | import javax.annotation.PostConstruct; 11 | import java.security.PublicKey; 12 | 13 | /** 14 | * @Author: wxw 15 | * @create: 2020-04-19-0:02 16 | */ 17 | @ConfigurationProperties(prefix = "wxw.jwt") 18 | @Getter 19 | @Setter 20 | public class JwtProperties { 21 | private String pubKeyPath;// 公钥 22 | 23 | private PublicKey publicKey; // 公钥 24 | 25 | private String cookieName; 26 | 27 | private static final Logger logger = LoggerFactory.getLogger(JwtProperties.class); 28 | 29 | /** 30 | * @PostContruct:在构造方法执行之后执行该方法 31 | */ 32 | @PostConstruct 33 | public void init() { 34 | try { 35 | // 获取公钥和私钥 36 | this.publicKey = RsaUtils.getPublicKey(pubKeyPath); 37 | } catch (Exception e) { 38 | logger.error("初始化公钥和私钥失败!", e); 39 | throw new RuntimeException(); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /cloud-server-order/cloud-order-service/src/main/java/com/wxw/cloud/config/MyBatisConfig.java: -------------------------------------------------------------------------------- 1 | package com.wxw.cloud.config; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize; 5 | import org.mybatis.spring.annotation.MapperScan; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.context.annotation.Configuration; 8 | import org.springframework.transaction.annotation.EnableTransactionManagement; 9 | 10 | /** 11 | * @Author: wxw 12 | * @create: 2020-03-15-1:37 13 | * MyBatis配置类 14 | */ 15 | @EnableTransactionManagement 16 | @Configuration 17 | @MapperScan("com.wxw.cloud.dao") 18 | public class MyBatisConfig { 19 | 20 | /** 21 | * 分页插件 22 | */ 23 | @Bean 24 | public PaginationInterceptor paginationInterceptor() { 25 | 26 | PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); 27 | // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false 28 | // paginationInterceptor.setOverflow(false); 29 | // 设置最大单页限制数量,默认 500 条,-1 不受限制 30 | // paginationInterceptor.setLimit(500); 31 | // 开启 count 的 join 优化,只针对部分 left join 32 | paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true)); 33 | return paginationInterceptor; 34 | } 35 | } 36 | 37 | -------------------------------------------------------------------------------- /cloud-server-order/cloud-order-service/src/main/java/com/wxw/cloud/config/WebConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.wxw.cloud.config; 2 | 3 | import com.wxw.cloud.interceptor.LoginOrderInterceptor; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 6 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 7 | 8 | import javax.annotation.Resource; 9 | 10 | /** 11 | * @Author: wxw 12 | * @create: 2020-04-23-1:14 13 | * Spring MVC 注解配置 14 | */ 15 | @Configuration 16 | public class WebConfiguration implements WebMvcConfigurer { 17 | 18 | @Resource 19 | private LoginOrderInterceptor loginInterceptor; 20 | 21 | /** 22 | * 定义拦截器 23 | * @param registry 24 | */ 25 | @Override 26 | public void addInterceptors(InterceptorRegistry registry) { 27 | registry.addInterceptor(loginInterceptor).addPathPatterns("/**"); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /cloud-server-order/cloud-order-service/src/main/java/com/wxw/cloud/controller/StackAndSeckillController.java: -------------------------------------------------------------------------------- 1 | package com.wxw.cloud.controller; 2 | 3 | 4 | import com.wxw.cloud.domain.Stock; 5 | import com.wxw.cloud.service.IStockService; 6 | import io.swagger.annotations.Api; 7 | import io.swagger.annotations.ApiOperation; 8 | import org.springframework.http.ResponseEntity; 9 | import org.springframework.util.CollectionUtils; 10 | import org.springframework.web.bind.annotation.GetMapping; 11 | 12 | import org.springframework.web.bind.annotation.RestController; 13 | 14 | import javax.annotation.Resource; 15 | import java.util.List; 16 | 17 | /** 18 | *19 | * 前端控制器 20 | *
21 | * 22 | * @author WXW 23 | * @since 2020-04-27 24 | */ 25 | @RestController 26 | @Api(tags = "StackAndSeckillController",description = "秒杀及仓库微服务") 27 | public class StackAndSeckillController { 28 | 29 | @Resource 30 | private IStockService stockService; 31 | 32 | @ApiOperation("获取库存列表") 33 | @GetMapping("/stock/list") 34 | public ResponseEntity8 | * Mapper 接口 9 | *
10 | * 11 | * @author WXW 12 | * @since 2020-04-27 13 | */ 14 | public interface AddressMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /cloud-server-order/cloud-order-service/src/main/java/com/wxw/cloud/dao/OrderDetailMapper.java: -------------------------------------------------------------------------------- 1 | package com.wxw.cloud.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.wxw.cloud.domain.Order; 5 | import com.wxw.cloud.domain.OrderDetail; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | *12 | * 订单详情表 Mapper 接口 13 | *
14 | * 15 | * @author WXW 16 | * @since 2020-04-27 17 | */ 18 | public interface OrderDetailMapper extends BaseMapper8 | * 订单状态表 Mapper 接口 9 | *
10 | * 11 | * @author WXW 12 | * @since 2020-04-27 13 | */ 14 | public interface OrderStatusMapper extends BaseMapper8 | * Mapper 接口 9 | *
10 | * 11 | * @author WXW 12 | * @since 2020-04-27 13 | */ 14 | public interface PayLogMapper extends BaseMapper8 | * Mapper 接口 9 | *
10 | * 11 | * @author WXW 12 | * @since 2020-04-27 13 | */ 14 | public interface SeckillOrderMapper extends BaseMapper10 | * 库存表,代表库存,秒杀库存等信息 Mapper 接口 11 | *
12 | * 13 | * @author WXW 14 | * @since 2020-04-05 15 | */ 16 | public interface StockMapper extends BaseMapper10 | * 服务类 11 | *
12 | * 13 | * @author WXW 14 | * @since 2020-04-27 15 | */ 16 | public interface IAddressService extends IService { 17 | 18 | void addAddressByUserId(Address address); 19 | 20 | List queryAddressByUserId(); 21 | 22 | void updateAddressByUserId(Address address); 23 | 24 | void deleteAddress(Long addressId); 25 | 26 | Address queryAddressById(Long addressId); 27 | 28 | List getAddressList(); 29 | } 30 | -------------------------------------------------------------------------------- /cloud-server-order/cloud-order-service/src/main/java/com/wxw/cloud/service/IOrderDetailService.java: -------------------------------------------------------------------------------- 1 | package com.wxw.cloud.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.wxw.cloud.domain.OrderDetail; 5 | 6 | /** 7 | *8 | * 订单详情表 服务类 9 | *
10 | * 11 | * @author WXW 12 | * @since 2020-04-27 13 | */ 14 | public interface IOrderDetailService extends IService8 | * 订单状态表 服务类 9 | *
10 | * 11 | * @author WXW 12 | * @since 2020-04-27 13 | */ 14 | public interface IOrderStatusService extends IService9 | * 服务类 10 | *
11 | * 12 | * @author WXW 13 | * @since 2020-04-27 14 | */ 15 | public interface IPayLogService extends IService8 | * 服务类 9 | *
10 | * 11 | * @author WXW 12 | * @since 2020-04-27 13 | */ 14 | public interface ISeckillOrderService extends IService11 | * 订单详情表 服务实现类 12 | *
13 | * 14 | * @author WXW 15 | * @since 2020-04-27 16 | */ 17 | @Service 18 | public class OrderDetailServiceImpl extends ServiceImpl11 | * 订单状态表 服务实现类 12 | *
13 | * 14 | * @author WXW 15 | * @since 2020-04-27 16 | */ 17 | @Service 18 | public class OrderStatusServiceImpl extends ServiceImpl11 | * 服务实现类 12 | *
13 | * 14 | * @author WXW 15 | * @since 2020-04-27 16 | */ 17 | @Service 18 | public class SeckillOrderServiceImpl extends ServiceImpl