diff --git a/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/OrderService.java b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/OrderService.java
new file mode 100644
index 000000000..972614316
--- /dev/null
+++ b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/OrderService.java
@@ -0,0 +1,57 @@
+package cn.iocoder.mall.order.api;
+
+import cn.iocoder.mall.order.api.bo.OrderBO;
+import cn.iocoder.mall.order.api.dto.OrderCreateDTO;
+import cn.iocoder.mall.order.api.dto.OrderUpdateDTO;
+
+/**
+ * 订单 service
+ *
+ * @author Sin
+ * @time 2019-03-16 13:15
+ */
+public interface OrderService {
+
+ /**
+ * 订单创建
+ *
+ * @param orderCreateDTO
+ * @return
+ */
+ OrderBO createOrder(OrderCreateDTO orderCreateDTO);
+
+ /**
+ * 订单更新
+ *
+ * @param orderUpdateDTO
+ */
+ void updateOrder(OrderUpdateDTO orderUpdateDTO);
+
+ /**
+ * 删除订单
+ *
+ * @param orderId
+ */
+ void deleteOrder(String orderId);
+
+ /**
+ * 监听支付动作
+ *
+ * mq 更新 payStatus
+ */
+ void listenerPayment();
+
+ /**
+ * 监听确认收货
+ *
+ * mq 更新 status
+ */
+ void listenerConfirmGoods();
+
+ /**
+ * 监听换货
+ *
+ * mq 更新 status
+ */
+ void listenerExchangeGoods();
+}
diff --git a/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/bo/OrderBO.java b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/bo/OrderBO.java
new file mode 100644
index 000000000..41a67260c
--- /dev/null
+++ b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/bo/OrderBO.java
@@ -0,0 +1,12 @@
+package cn.iocoder.mall.order.api.bo;
+
+import java.io.Serializable;
+
+/**
+ * 订单创建 BO
+ *
+ * @author Sin
+ * @time 2019-03-16 14:38
+ */
+public class OrderBO implements Serializable {
+}
diff --git a/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/constants/MQConstants.java b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/constants/MQConstants.java
new file mode 100644
index 000000000..b19bc9dd4
--- /dev/null
+++ b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/constants/MQConstants.java
@@ -0,0 +1,15 @@
+package cn.iocoder.mall.order.api.constants;
+
+/**
+ * MQ 订阅消息
+ *
+ * @author Sin
+ * @time 2019-03-16 15:04
+ */
+public class MQConstants {
+
+ /**
+ * 订单 - 创建成功 消息
+ */
+ public static final String ORDER_CREATE_SUCCESS = "order.orderCreateSuccess";
+}
diff --git a/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/constants/OrderPayStatusEnum.java b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/constants/OrderPayStatusEnum.java
new file mode 100644
index 000000000..b9e9c507b
--- /dev/null
+++ b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/constants/OrderPayStatusEnum.java
@@ -0,0 +1,26 @@
+package cn.iocoder.mall.order.api.constants;
+
+/**
+ * 订单状态 status
+ *
+ * @author Sin
+ * @time 2019-03-16 14:32
+ */
+public enum OrderPayStatusEnum {
+
+ WAITING_PAYMENT(0, "等待支付"),
+ SUCCESSFUL_PAYMENT(1, "支付成功"),
+ REFUND_PAYMENT(2, "退款成功"),
+
+ ;
+
+
+ private final int value;
+
+ private final String text;
+
+ OrderPayStatusEnum(int value, String text) {
+ this.value = value;
+ this.text = text;
+ }
+}
diff --git a/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/constants/OrderStatusEnum.java b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/constants/OrderStatusEnum.java
new file mode 100644
index 000000000..dd4b315b2
--- /dev/null
+++ b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/constants/OrderStatusEnum.java
@@ -0,0 +1,36 @@
+package cn.iocoder.mall.order.api.constants;
+
+/**
+ * 订单 - status
+ *
+ * @author Sin
+ * @time 2019-03-16 14:06
+ */
+public enum OrderStatusEnum {
+
+ // 基本状态
+ WAIT_SHIPMENT(0, "等待发货"),
+ ALREADY_SHIPMENT(1, "已发货"),
+ RECEIVED_GOODS(2, "已收货"),
+ CONFIRM_RECEIPT_GOODS(3, "确认收货"), // 确认收货,也就是交易成功!
+
+ // 换货
+ APPLY_EXCHANGE_GOODS(20, "申请换货"),
+ EXCHANGE_GOODS(21, "换货中"),
+ EXCHANGE_GOODS_SUCCESSFUL(22, "换货成功"),
+
+ // 退货
+ APPLY_RETURN_GOODS(40, "申请退货"),
+ RETURN_GOODS(41, "退货中"),
+ RETURN_GOODS_SUCCESSFUL(42, "退货成功"),
+
+ ;
+
+ private final int value;
+
+ private final String text;
+
+ OrderStatusEnum(int value, String text) {
+ this.value = value;
+ this.text = text;
+ }}
diff --git a/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/dto/OrderCreateDTO.java b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/dto/OrderCreateDTO.java
new file mode 100644
index 000000000..ffc105548
--- /dev/null
+++ b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/dto/OrderCreateDTO.java
@@ -0,0 +1,12 @@
+package cn.iocoder.mall.order.api.dto;
+
+import java.io.Serializable;
+
+/**
+ * 订单创建
+ *
+ * @author Sin
+ * @time 2019-03-16 14:42
+ */
+public class OrderCreateDTO implements Serializable {
+}
diff --git a/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/dto/OrderUpdateDTO.java b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/dto/OrderUpdateDTO.java
new file mode 100644
index 000000000..93ef4be1a
--- /dev/null
+++ b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/dto/OrderUpdateDTO.java
@@ -0,0 +1,12 @@
+package cn.iocoder.mall.order.api.dto;
+
+import java.io.Serializable;
+
+/**
+ * 订单更新
+ *
+ * @author Sin
+ * @time 2019-03-16 14:46
+ */
+public class OrderUpdateDTO implements Serializable {
+}
diff --git a/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/package-info.java b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/package-info.java
new file mode 100644
index 000000000..80054d29d
--- /dev/null
+++ b/order/order-service-api/src/main/java/cn/iocoder/mall/order/api/package-info.java
@@ -0,0 +1,7 @@
+/**
+ * 订单 api
+ *
+ * @author Sin
+ * @time 2019-03-16 13:15
+ */
+package cn.iocoder.mall.order.api;
\ No newline at end of file
diff --git a/order/order-service-impl/pom.xml b/order/order-service-impl/pom.xml
new file mode 100644
index 000000000..84772f74b
--- /dev/null
+++ b/order/order-service-impl/pom.xml
@@ -0,0 +1,47 @@
+
+
+
+ order
+ cn.iocoder.mall
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ order-service-impl
+
+
+
+ cn.iocoder.mall
+ order-service-api
+ 1.0-SNAPSHOT
+
+
+
+ com.alibaba
+ dubbo
+ compile
+
+
+ mysql
+ mysql-connector-java
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 2.0.0
+
+
+
+ com.google.guava
+ guava
+ 27.0.1-jre
+
+
+
\ No newline at end of file
diff --git a/order/order-service-impl/src/main/java/cn/iocoder/mall/order/dao/OrderMapper.java b/order/order-service-impl/src/main/java/cn/iocoder/mall/order/dao/OrderMapper.java
new file mode 100644
index 000000000..45ad68977
--- /dev/null
+++ b/order/order-service-impl/src/main/java/cn/iocoder/mall/order/dao/OrderMapper.java
@@ -0,0 +1,21 @@
+package cn.iocoder.mall.order.dao;
+
+import cn.iocoder.mall.order.dataobject.OrderDO;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 订单 mapper
+ *
+ * @author Sin
+ * @time 2019-03-16 15:09
+ */
+@Repository
+public interface OrderMapper {
+
+ /**
+ * 插入数据
+ *
+ * @param orderDO
+ */
+ void insert(OrderDO orderDO);
+}
diff --git a/order/order-service-impl/src/main/java/cn/iocoder/mall/order/dataobject/OrderDO.java b/order/order-service-impl/src/main/java/cn/iocoder/mall/order/dataobject/OrderDO.java
new file mode 100644
index 000000000..7ea7d5519
--- /dev/null
+++ b/order/order-service-impl/src/main/java/cn/iocoder/mall/order/dataobject/OrderDO.java
@@ -0,0 +1,201 @@
+package cn.iocoder.mall.order.dataobject;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 订单
+ *
+ * @author Sin
+ * @time 2019-03-16 13:49
+ */
+public class OrderDO implements Serializable {
+
+ /**
+ * 编号
+ */
+ private String id;
+ /**
+ * 订单编号
+ */
+ private String orderNo;
+ /**
+ * 交易金额
+ */
+ private Integer price;
+ /**
+ * 收件区域编号
+ */
+ private String receiverAreaNo;
+ /**
+ * 收件手机号
+ */
+ private String receiverMobile;
+ /**
+ * 收件详细地址
+ */
+ private String receiverAddress;
+ /**
+ * 状态(如果有多个商品分开发货需要全部商品发完才会改变状态)
+ *
+ * - 0、代发货
+ * - 1、已发货
+ * - 2、已收货
+ * - 20、换货中
+ * - 21、换货成功
+ * - 40、退货中
+ * - 41、已退货
+ */
+ private Integer status;
+ /**
+ * 支付状态
+ *
+ * - 0、待支付
+ * - 1、支付完成
+ * - 2、已退款
+ */
+ private Integer payStatus;
+ /**
+ * 订单创建时间
+ */
+ private Date createTime;
+ /**
+ * 付款时间
+ */
+ private Date paymentTime;
+ /**
+ * 发货时间
+ */
+ private Date deliveryTime;
+ /**
+ * 成交时间
+ */
+ private Date closingTime;
+ /**
+ * 备注
+ */
+ private String remark;
+
+ @Override
+ public String toString() {
+ return "Order{" +
+ "id='" + id + '\'' +
+ ", orderNo='" + orderNo + '\'' +
+ ", price=" + price +
+ ", receiverAreaNo='" + receiverAreaNo + '\'' +
+ ", receiverMobile='" + receiverMobile + '\'' +
+ ", receiverAddress='" + receiverAddress + '\'' +
+ ", status=" + status +
+ ", payStatus=" + payStatus +
+ ", createTime=" + createTime +
+ ", paymentTime=" + paymentTime +
+ ", deliveryTime=" + deliveryTime +
+ ", closingTime=" + closingTime +
+ ", remark='" + remark + '\'' +
+ '}';
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getOrderNo() {
+ return orderNo;
+ }
+
+ public void setOrderNo(String orderNo) {
+ this.orderNo = orderNo;
+ }
+
+ public Integer getPrice() {
+ return price;
+ }
+
+ public void setPrice(Integer price) {
+ this.price = price;
+ }
+
+ public String getReceiverAreaNo() {
+ return receiverAreaNo;
+ }
+
+ public void setReceiverAreaNo(String receiverAreaNo) {
+ this.receiverAreaNo = receiverAreaNo;
+ }
+
+ public String getReceiverMobile() {
+ return receiverMobile;
+ }
+
+ public void setReceiverMobile(String receiverMobile) {
+ this.receiverMobile = receiverMobile;
+ }
+
+ public String getReceiverAddress() {
+ return receiverAddress;
+ }
+
+ public void setReceiverAddress(String receiverAddress) {
+ this.receiverAddress = receiverAddress;
+ }
+
+ public Integer getStatus() {
+ return status;
+ }
+
+ public void setStatus(Integer status) {
+ this.status = status;
+ }
+
+ public Integer getPayStatus() {
+ return payStatus;
+ }
+
+ public void setPayStatus(Integer payStatus) {
+ this.payStatus = payStatus;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+
+ public Date getPaymentTime() {
+ return paymentTime;
+ }
+
+ public void setPaymentTime(Date paymentTime) {
+ this.paymentTime = paymentTime;
+ }
+
+ public Date getDeliveryTime() {
+ return deliveryTime;
+ }
+
+ public void setDeliveryTime(Date deliveryTime) {
+ this.deliveryTime = deliveryTime;
+ }
+
+ public Date getClosingTime() {
+ return closingTime;
+ }
+
+ public void setClosingTime(Date closingTime) {
+ this.closingTime = closingTime;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+}
diff --git a/order/order-service-impl/src/main/java/cn/iocoder/mall/order/dataobject/OrderItemDO.java b/order/order-service-impl/src/main/java/cn/iocoder/mall/order/dataobject/OrderItemDO.java
new file mode 100644
index 000000000..474d94b46
--- /dev/null
+++ b/order/order-service-impl/src/main/java/cn/iocoder/mall/order/dataobject/OrderItemDO.java
@@ -0,0 +1,105 @@
+package cn.iocoder.mall.order.dataobject;
+
+import java.io.Serializable;
+
+/**
+ * 订单 item
+ *
+ * @author Sin
+ * @time 2019-03-16 14:03
+ */
+public class OrderItemDO implements Serializable {
+
+ /**
+ * 编号
+ */
+ private String id;
+ /**
+ * 订单编号
+ */
+ private String orderId;
+ /**
+ * 商品编号
+ */
+ private String commodityId;
+ /**
+ * 数量
+ */
+ private Integer quantity;
+ /**
+ * 金额(分)
+ */
+ private Integer price;
+ /**
+ * 状态
+ *
+ * - 0、代发货
+ * - 1、已发货
+ * - 2、已收货
+ * - 20、换货中
+ * - 21、换货成功
+ * - 40、退货中
+ * - 41、已退货
+ */
+ private Integer status;
+
+ @Override
+ public String toString() {
+ return "OrderItem{" +
+ "id='" + id + '\'' +
+ ", orderId='" + orderId + '\'' +
+ ", commodityId='" + commodityId + '\'' +
+ ", quantity=" + quantity +
+ ", price=" + price +
+ ", status=" + status +
+ '}';
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getOrderId() {
+ return orderId;
+ }
+
+ public void setOrderId(String orderId) {
+ this.orderId = orderId;
+ }
+
+ public String getCommodityId() {
+ return commodityId;
+ }
+
+ public void setCommodityId(String commodityId) {
+ this.commodityId = commodityId;
+ }
+
+ public Integer getQuantity() {
+ return quantity;
+ }
+
+ public void setQuantity(Integer quantity) {
+ this.quantity = quantity;
+ }
+
+ public Integer getPrice() {
+ return price;
+ }
+
+ public void setPrice(Integer price) {
+ this.price = price;
+ }
+
+ public Integer getStatus() {
+ return status;
+ }
+
+ public void setStatus(Integer status) {
+ this.status = status;
+ }
+}
diff --git a/order/order-service-impl/src/main/java/cn/iocoder/mall/order/package-info.java b/order/order-service-impl/src/main/java/cn/iocoder/mall/order/package-info.java
new file mode 100644
index 000000000..3e032413e
--- /dev/null
+++ b/order/order-service-impl/src/main/java/cn/iocoder/mall/order/package-info.java
@@ -0,0 +1,5 @@
+/**
+ * @author Sin
+ * @time 2019-03-16 13:49
+ */
+package cn.iocoder.mall.order;
\ No newline at end of file
diff --git a/order/order-service-impl/src/main/java/cn/iocoder/mall/order/service/ServiceImpl.java b/order/order-service-impl/src/main/java/cn/iocoder/mall/order/service/ServiceImpl.java
new file mode 100644
index 000000000..69c69fba2
--- /dev/null
+++ b/order/order-service-impl/src/main/java/cn/iocoder/mall/order/service/ServiceImpl.java
@@ -0,0 +1,16 @@
+package cn.iocoder.mall.order.service;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * 订单 service impl
+ *
+ * @author Sin
+ * @time 2019-03-16 15:08
+ */
+@Service
+@com.alibaba.dubbo.config.annotation.Service(validation = "true")
+public class ServiceImpl {
+
+
+}
diff --git a/order/order-service-impl/src/main/resources/config/application.yaml b/order/order-service-impl/src/main/resources/config/application.yaml
new file mode 100644
index 000000000..598257e83
--- /dev/null
+++ b/order/order-service-impl/src/main/resources/config/application.yaml
@@ -0,0 +1,25 @@
+spring:
+ # datasource
+ datasource:
+ url: jdbc:mysql://180.167.213.26:13306/mall_order?useSSL=false&useUnicode=true&characterEncoding=UTF-8
+ driver-class-name: com.mysql.jdbc.Driver
+ username: root
+ password: ${MALL_MYSQL_PASSWORD}
+
+# mybatis
+mybatis:
+ config-location: classpath:mybatis-config.xml
+ mapper-locations: classpath:mapper/*.xml
+ type-aliases-package: cn.iocoder.mall.order.dataobject
+
+# dubbo
+dubbo:
+ application:
+ name: order-service
+ registry:
+ address: zookeeper://127.0.0.1:2181
+ protocol:
+ port: -1
+ name: dubbo
+ scan:
+ base-packages: cn.iocoder.mall.order.service
\ No newline at end of file
diff --git a/order/order-service-impl/src/main/resources/mapper/OrderMapper.xml b/order/order-service-impl/src/main/resources/mapper/OrderMapper.xml
new file mode 100644
index 000000000..04cab6fd0
--- /dev/null
+++ b/order/order-service-impl/src/main/resources/mapper/OrderMapper.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+ id, order_no, price, receiver_area_no, receiver_mobile,
+ receiver_address, status, pay_status, create_time,
+ payment_time, delivery_time, closing_time, remark
+
+
+
+ INSERT INTO order (
+ id, order_no, price, receiver_area_no, receiver_mobile,
+ receiver_address, status, pay_status, create_time,
+ payment_time, delivery_time, closing_time, remark
+ ) VALUES (
+ ${orderNo}, ${price}, ${receiverAreaNo}, ${receiverMobile},
+ ${receiverAddress}, ${status}, ${payStatus}, ${createTime},
+ ${paymentTime}, ${deliveryTime}, ${closingTime}, ${remark}
+ )
+
+
+
\ No newline at end of file
diff --git a/order/order-service-impl/src/main/resources/mybatis-config.xml b/order/order-service-impl/src/main/resources/mybatis-config.xml
new file mode 100644
index 000000000..7f604cc7e
--- /dev/null
+++ b/order/order-service-impl/src/main/resources/mybatis-config.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/order/pom.xml b/order/pom.xml
index 6facf3d6e..f1dd38c85 100644
--- a/order/pom.xml
+++ b/order/pom.xml
@@ -14,6 +14,7 @@
order-application
order-service-api
+ order-service-impl