diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml
index 5238d7182..3ccc97bcf 100644
--- a/yudao-dependencies/pom.xml
+++ b/yudao-dependencies/pom.xml
@@ -77,6 +77,7 @@
1.2.5
0.9.0
4.5.13
+ 2.2.25
2.17.0
1.27.1
@@ -92,6 +93,11 @@
+
+ io.swagger.core.v3
+ swagger-annotations
+ ${swagger-annotations.version}
+
io.netty
diff --git a/yudao-module-mall/yudao-module-trade-cola/pom.xml b/yudao-module-mall/yudao-module-trade-cola/pom.xml
index fa5951494..5b772258b 100644
--- a/yudao-module-mall/yudao-module-trade-cola/pom.xml
+++ b/yudao-module-mall/yudao-module-trade-cola/pom.xml
@@ -20,6 +20,7 @@
yudao-module-trade-cola-domain
yudao-module-trade-cola-infrastructure
+ yudao-module-trade-cola-client
-
\ No newline at end of file
+
diff --git a/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/pom.xml b/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/pom.xml
new file mode 100644
index 000000000..69f74f6e7
--- /dev/null
+++ b/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/pom.xml
@@ -0,0 +1,54 @@
+
+
+ 4.0.0
+
+ cn.iocoder.cloud
+ yudao-module-trade-cola
+ ${revision}
+
+
+ yudao-module-trade-cola-client
+
+ ${project.artifactId}
+
+ trade 模块 客户端层
+
+
+
+
+ cn.iocoder.cloud
+ yudao-common
+
+
+ io.swagger.core.v3
+ swagger-annotations
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+ true
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 14
+ 14
+
+
+
+
+
+
diff --git a/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/src/main/java/cn/iocoder/yudao/module/trade/api/order/api/TradeOrderServiceI.java b/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/src/main/java/cn/iocoder/yudao/module/trade/api/order/api/TradeOrderServiceI.java
new file mode 100644
index 000000000..e631b620e
--- /dev/null
+++ b/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/src/main/java/cn/iocoder/yudao/module/trade/api/order/api/TradeOrderServiceI.java
@@ -0,0 +1,46 @@
+package cn.iocoder.yudao.module.trade.api.order.api;
+
+import cn.iocoder.yudao.framework.common.enums.RpcConstants;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.module.trade.api.order.dto.clientobject.TradeOrderRespCO;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.Collection;
+import java.util.List;
+
+import static cn.iocoder.yudao.module.trade.api.order.api.TradeOrderServiceI.NAME;
+
+@FeignClient(name = NAME) // TODO 芋艿:fallbackFactory =
+@Tag(name = "RPC 服务 - 订单")
+public interface TradeOrderServiceI {
+
+ String NAME = "trade-server";
+ String PREFIX = RpcConstants.RPC_API_PREFIX + "/trade" + "/order";
+
+ @GetMapping(PREFIX + "/list")
+ @Operation(summary = "获得订单列表")
+ @Parameter(name = "ids", description = "订单编号数组", required = true)
+ CommonResult> getOrderList(@RequestParam("ids") Collection ids);
+
+ @GetMapping(PREFIX + "/get")
+ @Operation(summary = "获得订单")
+ @Parameter(name = "id", description = "订单编号", required = true)
+ CommonResult getOrder(@RequestParam("id") Long id);
+
+ @PutMapping(PREFIX + "/cancel-paid")
+ @Parameters({
+ @Parameter(name = "userId", description = "用户编号", required = true, example = "1024"),
+ @Parameter(name = "orderId", description = "订单编号", required = true, example = "2048"),
+ })
+ CommonResult cancelPaidOrder(@RequestParam("userId") Long userId,
+ @RequestParam("orderId") Long orderId,
+ @RequestParam("cancelType") Integer cancelType);
+
+}
diff --git a/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/src/main/java/cn/iocoder/yudao/module/trade/api/order/dto/clientobject/ClientObject.java b/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/src/main/java/cn/iocoder/yudao/module/trade/api/order/dto/clientobject/ClientObject.java
new file mode 100644
index 000000000..93e797019
--- /dev/null
+++ b/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/src/main/java/cn/iocoder/yudao/module/trade/api/order/dto/clientobject/ClientObject.java
@@ -0,0 +1,40 @@
+package cn.iocoder.yudao.module.trade.api.order.dto.clientobject;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This is the object communicate with Client. The clients could be view layer or other
+ * HSF Consumers.
+ *
+ * @author fulan.zjf 2017-10-27 PM 12:19:15
+ */
+@Setter
+@Getter
+public abstract class ClientObject implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * This is for extended values。
+ */
+ protected Map extValues = new HashMap<>();
+
+ public Object getExtField(String key) {
+ if (extValues != null) {
+ return extValues.get(key);
+ }
+ return null;
+ }
+
+ public void putExtField(String fieldName, Object value) {
+ this.extValues.put(fieldName, value);
+ }
+
+}
diff --git a/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/src/main/java/cn/iocoder/yudao/module/trade/api/order/dto/clientobject/DTO.java b/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/src/main/java/cn/iocoder/yudao/module/trade/api/order/dto/clientobject/DTO.java
new file mode 100644
index 000000000..359da77ab
--- /dev/null
+++ b/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/src/main/java/cn/iocoder/yudao/module/trade/api/order/dto/clientobject/DTO.java
@@ -0,0 +1,18 @@
+package cn.iocoder.yudao.module.trade.api.order.dto.clientobject;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * Data Transfer object, including Command, Query and Response, Command and Query is CQRS
+ * concept.
+ *
+ * @author Frank Zhang 2020.11.13
+ *
+ */
+public abstract class DTO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+}
diff --git a/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/src/main/java/cn/iocoder/yudao/module/trade/api/order/dto/clientobject/TradeOrderRespCO.java b/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/src/main/java/cn/iocoder/yudao/module/trade/api/order/dto/clientobject/TradeOrderRespCO.java
new file mode 100644
index 000000000..7ad974518
--- /dev/null
+++ b/yudao-module-mall/yudao-module-trade-cola/yudao-module-trade-cola-client/src/main/java/cn/iocoder/yudao/module/trade/api/order/dto/clientobject/TradeOrderRespCO.java
@@ -0,0 +1,70 @@
+package cn.iocoder.yudao.module.trade.api.order.dto.clientobject;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 订单信息 Response DTO
+ *
+ * @author HUIHUI
+ * @author laokou
+ */
+@Schema(description = "RPC 服务 - 订单信息 Response CO")
+@Data
+public class TradeOrderRespCO extends ClientObject {
+
+ // ========== 订单基本信息 ==========
+
+ @Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Long id;
+
+ @Schema(description = "订单流水号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1146347329394184195")
+ private String no;
+
+ @Schema(description = "订单类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ private Integer type; // 参见 TradeOrderTypeEnum 枚举
+
+ @Schema(description = "订单来源", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ private Integer terminal; // 参见 TerminalEnum 枚举
+
+ @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Long userId;
+
+ @Schema(description = "用户 IP", requiredMode = Schema.RequiredMode.REQUIRED, example = "127.0.0.1")
+ private String userIp;
+
+ @Schema(description = "用户备注", example = "这个商品不错哦")
+ private String userRemark;
+
+ @Schema(description = "订单状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
+ private Integer status; // 参见 TradeOrderStatusEnum 枚举
+
+ @Schema(description = "购买的商品数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
+ private Integer productCount;
+
+ @Schema(description = "订单完成时间")
+ private LocalDateTime finishTime;
+
+ @Schema(description = "订单取消时间")
+ private LocalDateTime cancelTime;
+
+ @Schema(description = "取消类型", example = "1")
+ private Integer cancelType; // 参见 TradeOrderCancelTypeEnum 枚举
+
+ @Schema(description = "商家备注", example = "这个用户很喜欢退货")
+ private String remark;
+
+ @Schema(description = "是否评价", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
+ private Boolean commentStatus;
+
+ // ========== 价格 + 支付基本信息 ==========
+
+ @Schema(description = "支付订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Long payOrderId;
+
+ @Schema(description = "是否已支付", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
+ private Boolean payStatus;
+
+}