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; + +}