From 0a14b530b6f27633f9c43147c4a42dff0618f6df Mon Sep 17 00:00:00 2001 From: YunaiV <> Date: Sat, 28 Nov 2020 22:52:52 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E8=BF=81=E7=A7=BB=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E4=BA=A4=E6=98=93=E5=8D=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/biz/service/OrderServiceImpl.java | 17 +-- order/order-biz-api/pom.xml | 24 ---- .../mall/order/biz/enums/order/PayAppId.java | 16 --- .../api/constant/OrderErrorCodeEnum.java | 67 ----------- .../mall/order/api/constant/PayAppId.java | 16 --- .../enums/PayErrorCodeConstants.java | 31 +++++ .../PayTransactionStatusEnum.java | 2 +- .../mall/payservice/rpc/package-info.java | 1 - .../rpc/transaction/PayTransactionRpc.java | 11 +- pay-service-project/pay-service-app/pom.xml | 2 +- .../payservice/convert/app/PayAppConvert.java | 16 +++ .../transaction/PayTransactionConvert.java | 15 +++ .../transaction/TransactionConvert.java | 12 -- .../dal/mysql/dataobject/app/PayAppDO.java | 2 + .../dal/mysql/mapper/app/PayAppMapper.java | 9 ++ .../transaction/PayTransactionMapper.java | 6 + .../transaction/PayTransactionRpcImpl.java | 20 +++- .../payservice/service/app/PayAppService.java | 12 +- .../service/app/impl/PayAppServiceImpl.java | 39 ++++--- .../transaction/PayTransactionService.java | 10 +- .../impl/PayTransactionServiceImpl.java | 108 ++++++------------ .../pay/api/constant/PayErrorCodeEnum.java | 46 -------- .../biz/convert/PayTransactionConvert.java | 31 ----- .../pay/biz/dao/PayTransactionMapper.java | 8 -- .../service/PayTransactionServiceImpl.java | 23 ---- .../resources/config/application.properties | 1 - .../main/resources/config/application.yaml | 65 ----------- .../main/resources/mapper/PayAppMapper.xml | 37 ------ .../trade-service-app/pom.xml | 13 ++- .../client/pay/PayTransactionClient.java | 21 ++++ .../config/TradeBizProperties.java | 30 +++++ .../order/impl/TradeOrderServiceImpl.java | 33 +++++- .../src/main/resources/application.yaml | 7 ++ 33 files changed, 284 insertions(+), 467 deletions(-) delete mode 100644 order/order-biz-api/pom.xml delete mode 100644 order/order-biz-api/src/main/java/cn/iocoder/mall/order/biz/enums/order/PayAppId.java delete mode 100644 order/order-service-api02/src/main/java/cn/iocoder/mall/order/api/constant/OrderErrorCodeEnum.java delete mode 100644 order/order-service-api02/src/main/java/cn/iocoder/mall/order/api/constant/PayAppId.java create mode 100644 pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/enums/PayErrorCodeConstants.java rename {pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant => pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/enums/transaction}/PayTransactionStatusEnum.java (93%) delete mode 100644 pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/package-info.java create mode 100644 pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/app/PayAppConvert.java create mode 100644 pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/transaction/PayTransactionConvert.java delete mode 100644 pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/transaction/TransactionConvert.java create mode 100644 pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/mapper/app/PayAppMapper.java delete mode 100644 pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayErrorCodeEnum.java delete mode 100644 pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/convert/PayTransactionConvert.java delete mode 100644 pay/pay-service-impl/src/main/resources/config/application.properties delete mode 100644 pay/pay-service-impl/src/main/resources/config/application.yaml delete mode 100644 pay/pay-service-impl/src/main/resources/mapper/PayAppMapper.xml create mode 100644 trade-service-project/trade-service-app/src/main/java/cn/iocoder/mall/tradeservice/client/pay/PayTransactionClient.java create mode 100644 trade-service-project/trade-service-app/src/main/java/cn/iocoder/mall/tradeservice/config/TradeBizProperties.java diff --git a/moved/order/order-service-impl/src/main/java/cn/iocoder/mall/order/biz/service/OrderServiceImpl.java b/moved/order/order-service-impl/src/main/java/cn/iocoder/mall/order/biz/service/OrderServiceImpl.java index 00f6b34ad..97a6af18d 100644 --- a/moved/order/order-service-impl/src/main/java/cn/iocoder/mall/order/biz/service/OrderServiceImpl.java +++ b/moved/order/order-service-impl/src/main/java/cn/iocoder/mall/order/biz/service/OrderServiceImpl.java @@ -99,22 +99,7 @@ public class OrderServiceImpl implements OrderService { return CommonResult.success(orderInfoBO); } - private PayTransactionBO createPayTransaction(OrderDO order, List orderItems, String ip) { - // TODO sin 支付订单 orderSubject 暂时取第一个子订单商品信息 - String orderSubject = orderItems.get(0).getSkuName(); - Date expireTime = DateUtil.addDate(Calendar.MINUTE, PAY_EXPIRE_TIME); - return payTransactionService.createTransaction( - new PayTransactionCreateDTO() - .setCreateIp(ip) - .setAppId(PayAppId.APP_ID_SHOP_ORDER) - .setOrderId(order.getId().toString()) - .setExpireTime(expireTime) - .setPrice(order.getPresentPrice()) - .setOrderSubject(orderSubject) - .setOrderMemo("测试备注") // TODO 芋艿,后面补充 - .setOrderDescription("测试描述") // TODO 芋艿,后面补充 - ); - } + @Override // TODO 芋艿,需要确认下这个方法的用途。因为涉及修改价格和数量。 public CommonResult updateOrderItem(OrderItemUpdateDTO orderUpdateDTO) { diff --git a/order/order-biz-api/pom.xml b/order/order-biz-api/pom.xml deleted file mode 100644 index 0987a0c06..000000000 --- a/order/order-biz-api/pom.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - product - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - order-biz-api - - - - - cn.iocoder.mall - common-framework - 1.0-SNAPSHOT - - - - - diff --git a/order/order-biz-api/src/main/java/cn/iocoder/mall/order/biz/enums/order/PayAppId.java b/order/order-biz-api/src/main/java/cn/iocoder/mall/order/biz/enums/order/PayAppId.java deleted file mode 100644 index dd6f66bba..000000000 --- a/order/order-biz-api/src/main/java/cn/iocoder/mall/order/biz/enums/order/PayAppId.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.iocoder.mall.order.biz.enums.order; - -/** - * 支付 AppId - * - * @author Sin - * @time 2019-04-08 19:54 - */ -public class PayAppId { - - /** - * 电商 - */ - public static final String APP_ID_SHOP_ORDER = "POd4RC6a"; - -} diff --git a/order/order-service-api02/src/main/java/cn/iocoder/mall/order/api/constant/OrderErrorCodeEnum.java b/order/order-service-api02/src/main/java/cn/iocoder/mall/order/api/constant/OrderErrorCodeEnum.java deleted file mode 100644 index 2e98abd34..000000000 --- a/order/order-service-api02/src/main/java/cn/iocoder/mall/order/api/constant/OrderErrorCodeEnum.java +++ /dev/null @@ -1,67 +0,0 @@ -package cn.iocoder.mall.order.api.constant; - -/** - * 订单错误码 - * - * 错误码区间 [1-008-000-000 ~ 1-008-000-000] - * - * @author Sin - * @time 2019-03-23 11:23 - */ -public enum OrderErrorCodeEnum { - - // order - ORDER_NOT_EXISTENT(1008000000, "获取订单不存在!"), - ORDER_GET_SKU_FAIL(1008000001, "获取商品失败!"), - ORDER_GET_SKU_NOT_EXISTENT(1008000002, "获取的商品不存在!"), - ORDER_PAY_AMOUNT_NOT_NEGATIVE(1008000003, "支付金额不能为负数!"), - ORDER_STATUS_NOT_CANCEL(1008000004, "订单状态不能取消!"), - ORDER_DELIVERY_INCORRECT_DATA(1008000005, "订单发货数据不正确!"), - ORDER_INSUFFICIENT_INVENTORY(1008000006, "库存不足!"), - ORDER_GOODS_AMOUNT_INCORRECT(1008000007, "商品金额非法!"), - ORDER_GET_GOODS_INFO_INCORRECT(1008000008, "获取额商品信息不正确!"), - ORDER_GET_USER_ADDRESS_FAIL(1008000009, "获取用户地址失败!"), - ORDER_GET_PAY_FAIL(1008000010, "调用pay失败!"), - ORDER_NOT_USER_ORDER(1008000011, "不是该用户的订单!"), - ORDER_UNABLE_CONFIRM_ORDER(1008000012, "状态不对不能确认订单!"), - ORDER_CREATE_CART_IS_EMPTY(1008000013, "购物车无选中的商品,无法创建订单"), - ORDER_STATUS_NOT_WAITING_PAYMENT(1008000014, "订单不处于等待支付状态"), - ORDER_PAY_AMOUNT_ERROR(1008000015, "订单金额不正确"), - - // order item - ORDER_ITEM_ONLY_ONE(1008000200, "订单Item只有一个!"), - - // 订单退货 - ORDER_RETURN_NO_RETURN_APPLY(1008000400, "未退货申请"), - ORDER_RETURN_NOT_EXISTENT(1008000401, "退货订单不存在"), - ORDER_RETURN_REFUND_FAILED(1008000402, "退款失败"), - - // ========== 购物车 ========== - CARD_ITEM_NOT_FOUND(1008003000, "购物车项不存在"), - CARD_ITEM_SKU_NOT_FOUND(1008003001, "商品不存在"), - CARD_ITEM_SKU_QUANTITY_NOT_ENOUGH(1008003002, "商品库存不足"), - - // 工具类服务 1008004000 - DICT_SERVER_INVOKING_FAIL(1008004000, "字典服务调用失败!"), - ORDER_LOGISTICS_INVOKING_FAIL(1008004001, "订单物流调用失败!"), - - - ; - - private final int code; - private final String message; - - OrderErrorCodeEnum(int code, String message) { - this.code = code; - this.message = message; - } - - public int getCode() { - return code; - } - - public String getMessage() { - return message; - } - -} diff --git a/order/order-service-api02/src/main/java/cn/iocoder/mall/order/api/constant/PayAppId.java b/order/order-service-api02/src/main/java/cn/iocoder/mall/order/api/constant/PayAppId.java deleted file mode 100644 index 8d729ab8c..000000000 --- a/order/order-service-api02/src/main/java/cn/iocoder/mall/order/api/constant/PayAppId.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.iocoder.mall.order.api.constant; - -/** - * 支付 AppId - * - * @author Sin - * @time 2019-04-08 19:54 - */ -public class PayAppId { - - /** - * 电商 - */ - public static final String APP_ID_SHOP_ORDER = "POd4RC6a"; - -} diff --git a/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/enums/PayErrorCodeConstants.java b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/enums/PayErrorCodeConstants.java new file mode 100644 index 000000000..d3905e6cc --- /dev/null +++ b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/enums/PayErrorCodeConstants.java @@ -0,0 +1,31 @@ +package cn.iocoder.mall.payservice.enums; + +import cn.iocoder.common.framework.exception.ErrorCode; + +/** + * 错误码枚举类 + * + * 管理员系统,使用 1-004-000-000 段 + */ +public interface PayErrorCodeConstants { + + // ========== APP 模块 ========== + ErrorCode PAY_APP_NOT_FOUND = new ErrorCode(1004000000, "App 不存在"); + ErrorCode PAY_APP_IS_DISABLE = new ErrorCode(1004000001, "App 已经被禁用"); + + // ========== TRANSACTION PAY 模块 ========== + ErrorCode PAY_TRANSACTION_NOT_FOUND = new ErrorCode(100401000, "支付交易单不存在"); + ErrorCode PAY_TRANSACTION_STATUS_IS_NOT_WAITING = new ErrorCode(100401001, "支付交易单不处于待支付"); + ErrorCode PAY_TRANSACTION_STATUS_IS_NOT_SUCCESS = new ErrorCode(100401002, "支付交易单不处于已支付"); + ErrorCode PAY_TRANSACTION_ERROR_USER = new ErrorCode(100401003, "支付交易单用户不正确"); + + ErrorCode PAY_TRANSACTION_EXTENSION_NOT_FOUND = new ErrorCode(100401050, "支付交易拓展单不存在"); + ErrorCode PAY_TRANSACTION_EXTENSION_STATUS_IS_NOT_WAITING = new ErrorCode(100401051, "支付交易拓展单不处于待支付"); + ErrorCode PAY_TRANSACTION_EXTENSION_STATUS_IS_NOT_SUCCESS = new ErrorCode(100401052, "支付交易单不处于已支付"); + + // ========== TRANSACTION REFUND 模块 ========== + ErrorCode PAY_REFUND_PRICE_EXCEED = new ErrorCode(100402000, "退款金额超过支付交易单可退金额"); + ErrorCode PAY_REFUND_NOT_FOUND = new ErrorCode(100402001, "退款单不存在"); + ErrorCode PAY_REFUND_STATUS_NOT_WAITING = new ErrorCode(100402002, "退款单不处于待处理"); + +} diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayTransactionStatusEnum.java b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/enums/transaction/PayTransactionStatusEnum.java similarity index 93% rename from pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayTransactionStatusEnum.java rename to pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/enums/transaction/PayTransactionStatusEnum.java index 241884271..92c252bd1 100644 --- a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayTransactionStatusEnum.java +++ b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/enums/transaction/PayTransactionStatusEnum.java @@ -1,4 +1,4 @@ -package cn.iocoder.mall.pay.api.constant; +package cn.iocoder.mall.payservice.enums.transaction; /** * 支付交易状态枚举 diff --git a/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/package-info.java b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/package-info.java deleted file mode 100644 index df8cac927..000000000 --- a/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.mall.payservice.rpc; diff --git a/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpc.java b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpc.java index d7cf25456..7bd417452 100644 --- a/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpc.java +++ b/pay-service-project/pay-service-api/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpc.java @@ -1,10 +1,19 @@ package cn.iocoder.mall.payservice.rpc.transaction; +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO; + /** * 支付交易单 RPC 接口 */ public interface PayTransactionRpc { - + /** + * 创建支付交易单 + * + * @param createReqDTO 创建信息 + * @return 支付交易单号 + */ + CommonResult createPayTransaction(PayTransactionCreateReqDTO createReqDTO); } diff --git a/pay-service-project/pay-service-app/pom.xml b/pay-service-project/pay-service-app/pom.xml index 0d3573617..f719ac414 100644 --- a/pay-service-project/pay-service-app/pom.xml +++ b/pay-service-project/pay-service-app/pom.xml @@ -21,7 +21,7 @@ cn.iocoder.mall - product-service-api + pay-service-api 1.0-SNAPSHOT diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/app/PayAppConvert.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/app/PayAppConvert.java new file mode 100644 index 000000000..d6d44a098 --- /dev/null +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/app/PayAppConvert.java @@ -0,0 +1,16 @@ +package cn.iocoder.mall.payservice.convert.app; + +import cn.iocoder.mall.payservice.dal.mysql.dataobject.app.PayAppDO; +import cn.iocoder.mall.payservice.rpc.app.dto.PayAppRespDTO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface PayAppConvert { + + PayAppConvert INSTANCE = Mappers.getMapper(PayAppConvert.class); + + PayAppRespDTO convert(PayAppDO bean); + +} + diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/transaction/PayTransactionConvert.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/transaction/PayTransactionConvert.java new file mode 100644 index 000000000..c6870da19 --- /dev/null +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/transaction/PayTransactionConvert.java @@ -0,0 +1,15 @@ +package cn.iocoder.mall.payservice.convert.transaction; + +import cn.iocoder.mall.payservice.dal.mysql.dataobject.transaction.PayTransactionDO; +import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface PayTransactionConvert { + + PayTransactionConvert INSTANCE = Mappers.getMapper(PayTransactionConvert.class); + + PayTransactionDO convert(PayTransactionCreateReqDTO bean); + +} diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/transaction/TransactionConvert.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/transaction/TransactionConvert.java deleted file mode 100644 index fdd7a3594..000000000 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/convert/transaction/TransactionConvert.java +++ /dev/null @@ -1,12 +0,0 @@ -package cn.iocoder.mall.payservice.convert.transaction; - -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -@Mapper -public interface TransactionConvert { - - TransactionConvert INSTANCE = Mappers.getMapper(TransactionConvert.class); - - -} diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/dataobject/app/PayAppDO.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/dataobject/app/PayAppDO.java index cafe6f2f6..bf2c8bbd1 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/dataobject/app/PayAppDO.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/dataobject/app/PayAppDO.java @@ -1,6 +1,7 @@ package cn.iocoder.mall.payservice.dal.mysql.dataobject.app; import cn.iocoder.mall.mybatis.core.dataobject.DeletableDO; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -10,6 +11,7 @@ import lombok.experimental.Accessors; * * 每个接入的业务都是一个应用,进行个性化的配置 */ +@TableName("pay_app") @Data @EqualsAndHashCode(callSuper = true) @Accessors(chain = true) diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/mapper/app/PayAppMapper.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/mapper/app/PayAppMapper.java new file mode 100644 index 000000000..0717898ea --- /dev/null +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/mapper/app/PayAppMapper.java @@ -0,0 +1,9 @@ +package cn.iocoder.mall.payservice.dal.mysql.mapper.app; + +import cn.iocoder.mall.payservice.dal.mysql.dataobject.app.PayAppDO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +@Repository +public interface PayAppMapper extends BaseMapper { +} diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/mapper/transaction/PayTransactionMapper.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/mapper/transaction/PayTransactionMapper.java index b3709ddb2..29b102da0 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/mapper/transaction/PayTransactionMapper.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/dal/mysql/mapper/transaction/PayTransactionMapper.java @@ -1,6 +1,7 @@ package cn.iocoder.mall.payservice.dal.mysql.mapper.transaction; import cn.iocoder.mall.payservice.dal.mysql.dataobject.transaction.PayTransactionDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.springframework.stereotype.Repository; @@ -12,4 +13,9 @@ public interface PayTransactionMapper extends BaseMapper { // new QueryWrapperX()); // } + default PayTransactionDO selectByAppIdAndOrderId(String appId, String orderId) { + return selectOne(new QueryWrapper().eq("app_id", appId) + .eq("order_id", orderId)); + } + } diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpcImpl.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpcImpl.java index 6e3fd8611..fde8369d0 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpcImpl.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/rpc/transaction/PayTransactionRpcImpl.java @@ -1,4 +1,22 @@ package cn.iocoder.mall.payservice.rpc.transaction; -public class PayTransactionRpcImpl { +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO; +import cn.iocoder.mall.payservice.service.transaction.PayTransactionService; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.beans.factory.annotation.Autowired; + +import static cn.iocoder.common.framework.vo.CommonResult.success; + +@DubboService +public class PayTransactionRpcImpl implements PayTransactionRpc { + + @Autowired + private PayTransactionService payTransactionService; + + @Override + public CommonResult createPayTransaction(PayTransactionCreateReqDTO createReqDTO) { + return success(payTransactionService.createPayTransaction(createReqDTO)); + } + } diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/app/PayAppService.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/app/PayAppService.java index b61a12bd5..eb0e8c1b6 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/app/PayAppService.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/app/PayAppService.java @@ -1,10 +1,20 @@ package cn.iocoder.mall.payservice.service.app; +import cn.iocoder.mall.payservice.rpc.app.dto.PayAppRespDTO; + /** * 支付应用 Service 接口 */ public interface PayAppService { - + /** + * 交易支付应用的合法性 + * + * 如果不合法,抛出 {@link cn.iocoder.common.framework.exception.ServiceException} 业务异常 + * + * @param payAppId 应用编号 + * @return 应用信息 + */ + PayAppRespDTO validPayApp(String payAppId); } diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/app/impl/PayAppServiceImpl.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/app/impl/PayAppServiceImpl.java index 8db585e63..6f57cf598 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/app/impl/PayAppServiceImpl.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/app/impl/PayAppServiceImpl.java @@ -1,25 +1,38 @@ package cn.iocoder.mall.payservice.service.app.impl; +import cn.iocoder.common.framework.enums.CommonStatusEnum; +import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil; +import cn.iocoder.mall.payservice.convert.app.PayAppConvert; +import cn.iocoder.mall.payservice.dal.mysql.dataobject.app.PayAppDO; +import cn.iocoder.mall.payservice.dal.mysql.mapper.app.PayAppMapper; +import cn.iocoder.mall.payservice.rpc.app.dto.PayAppRespDTO; import cn.iocoder.mall.payservice.service.app.PayAppService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import static cn.iocoder.mall.payservice.enums.PayErrorCodeConstants.*; /** * 支付应用 Service 实现类 */ +@Service public class PayAppServiceImpl implements PayAppService { + @Autowired + private PayAppMapper payAppMapper; - -// public PayAppDO validPayApp(String appId) { -// PayAppDO payAppDO = payAppMapper.selectById(appId); -// // 校验是否存在 -// if (payAppDO == null) { -// throw ServiceExceptionUtil.exception(PayErrorCodeEnum.PAY_APP_NOT_FOUND.getCode()); -// } -// // 校验是否禁用 -// if (CommonStatusEnum.DISABLE.getValue().equals(payAppDO.getStatus())) { -// throw ServiceExceptionUtil.exception(PayErrorCodeEnum.PAY_APP_IS_DISABLE.getCode()); -// } -// return payAppDO; -// } + @Override + public PayAppRespDTO validPayApp(String payAppId) { + PayAppDO payAppDO = payAppMapper.selectById(payAppId); + // 校验是否存在 + if (payAppDO == null) { + throw ServiceExceptionUtil.exception(PAY_APP_NOT_FOUND); + } + // 校验是否禁用 + if (CommonStatusEnum.DISABLE.getValue().equals(payAppDO.getStatus())) { + throw ServiceExceptionUtil.exception(PAY_APP_IS_DISABLE); + } + return PayAppConvert.INSTANCE.convert(payAppDO); + } } diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/PayTransactionService.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/PayTransactionService.java index e45571ada..72f5946ca 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/PayTransactionService.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/PayTransactionService.java @@ -1,10 +1,18 @@ package cn.iocoder.mall.payservice.service.transaction; +import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO; + /** * 支付交易单 Service 接口 */ public interface PayTransactionService { - + /** + * 创建支付交易单 + * + * @param createReqDTO 创建信息 + * @return 支付交易单号 + */ + Integer createPayTransaction(PayTransactionCreateReqDTO createReqDTO); } diff --git a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/impl/PayTransactionServiceImpl.java b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/impl/PayTransactionServiceImpl.java index 931726b5b..ed1009029 100644 --- a/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/impl/PayTransactionServiceImpl.java +++ b/pay-service-project/pay-service-app/src/main/java/cn/iocoder/mall/payservice/service/transaction/impl/PayTransactionServiceImpl.java @@ -1,7 +1,14 @@ package cn.iocoder.mall.payservice.service.transaction.impl; +import cn.iocoder.mall.payservice.convert.transaction.PayTransactionConvert; +import cn.iocoder.mall.payservice.dal.mysql.dataobject.transaction.PayTransactionDO; import cn.iocoder.mall.payservice.dal.mysql.mapper.transaction.PayTransactionMapper; +import cn.iocoder.mall.payservice.enums.transaction.PayTransactionStatusEnum; +import cn.iocoder.mall.payservice.rpc.app.dto.PayAppRespDTO; +import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO; +import cn.iocoder.mall.payservice.service.app.PayAppService; import cn.iocoder.mall.payservice.service.transaction.PayTransactionService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -11,87 +18,36 @@ import org.springframework.validation.annotation.Validated; */ @Service @Validated +@Slf4j public class PayTransactionServiceImpl implements PayTransactionService { @Autowired - private PayTransactionMapper transactionMapper; + private PayTransactionMapper payTransactionMapper; + @Autowired + private PayAppService payAppService; + @Override + public Integer createPayTransaction(PayTransactionCreateReqDTO createReqDTO) { + // 校验 App + PayAppRespDTO payAppRespDTO = payAppService.validPayApp(createReqDTO.getAppId()); -// /** -// * 创建pay_transaction -// * -// * @param createBO 创建pay_transaction BO -// * @return pay_transaction -// */ -// public TransactionBO createTransaction(@Valid TransactionCreateBO createBO) { -// // 插入到数据库 -// PayTransactionDO transactionDO = TransactionConvert.INSTANCE.convert(createBO); -// transactionMapper.insert(transactionDO); -// // 返回 -// return TransactionConvert.INSTANCE.convert(transactionDO); -// } -// -// /** -// * 更新pay_transaction -// * -// * @param updateBO 更新pay_transaction BO -// */ -// public void updateTransaction(@Valid TransactionUpdateBO updateBO) { -// // 校验更新的pay_transaction是否存在 -// if (transactionMapper.selectById(updateBO.getId()) == null) { -// throw ServiceExceptionUtil.exception(AuthErrorCodeConstants.TRANSACTION_NOT_FOUND); -// } -// // 更新到数据库 -// PayTransactionDO updateObject = TransactionConvert.INSTANCE.convert(updateBO); -// transactionMapper.updateById(updateObject); -// } -// -// /** -// * 删除pay_transaction -// * -// * @param transactionId pay_transaction编号 -// */ -// public void deleteTransaction(Integer transactionId) { -// // 校验删除的pay_transaction是否存在 -// if (transactionMapper.selectById(transactionId) == null) { -// throw ServiceExceptionHelper.exception(AuthErrorCodeConstants.TRANSACTION_NOT_FOUND); -// } -// // 标记删除 -// transactionMapper.deleteById(transactionId); -// } -// -// /** -// * 获得pay_transaction -// * -// * @param transactionId pay_transaction编号 -// * @return pay_transaction -// */ -// public TransactionBO getTransaction(Integer transactionId) { -// PayTransactionDO transactionDO = transactionMapper.selectById(transactionId); -// return TransactionConvert.INSTANCE.convert(transactionDO); -// } -// -// /** -// * 获得pay_transaction列表 -// * -// * @param transactionIds pay_transaction编号列表 -// * @return pay_transaction列表 -// */ -// public List listTransactions(List transactionIds) { -// List transactionDOs = transactionMapper.selectBatchIds(transactionIds); -// return TransactionConvert.INSTANCE.convertList(transactionDOs); -// } -// -// /** -// * 获得pay_transaction分页 -// * -// * @param pageBO pay_transaction分页查询 -// * @return pay_transaction分页结果 -// */ -// public PageResult pageTransaction(TransactionPageBO pageBO) { -// IPage transactionDOPage = transactionMapper.selectPage(pageBO); -// return TransactionConvert.INSTANCE.convertPage(transactionDOPage); -// } + // 查询对应的支付交易单是否已经存在。如果是,则直接返回 + PayTransactionDO payTransaction = payTransactionMapper.selectByAppIdAndOrderId( + createReqDTO.getAppId(), createReqDTO.getOrderId()); + if (payTransaction != null) { + log.warn("[createTransaction][appId({}) orderId({}) 已经存在对应的支付交易单({})]", createReqDTO.getAppId(), + createReqDTO.getOrderId(), payTransaction.toString()); // 理论来说,不会出现这个情况 + return payTransaction.getId(); + } + + // 创建支付交易单 + payTransaction = PayTransactionConvert.INSTANCE.convert(createReqDTO) + .setStatus(PayTransactionStatusEnum.WAITING.getValue()) + .setNotifyUrl(payAppRespDTO.getPayNotifyUrl()); + payTransactionMapper.insert(payTransaction); + // 最终返回 + return payTransaction.getId(); + } } diff --git a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayErrorCodeEnum.java b/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayErrorCodeEnum.java deleted file mode 100644 index 76305eb65..000000000 --- a/pay/pay-service-api/src/main/java/cn/iocoder/mall/pay/api/constant/PayErrorCodeEnum.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.iocoder.mall.pay.api.constant; - -/** - * 错误码枚举类 - * - * 管理员系统,使用 1-004-000-000 段 - */ -public enum PayErrorCodeEnum { - - // ========== APP 模块 ========== - PAY_APP_NOT_FOUND(1004000000, "App 不存在"), - PAY_APP_IS_DISABLE(1004000001, "App 已经被禁用"), - - // ========== TRANSACTION PAY 模块 ========== - PAY_TRANSACTION_NOT_FOUND(100401000, "支付交易单不存在"), - PAY_TRANSACTION_STATUS_IS_NOT_WAITING(100401001, "支付交易单不处于待支付"), - PAY_TRANSACTION_STATUS_IS_NOT_SUCCESS(100401002, "支付交易单不处于已支付"), - PAY_TRANSACTION_ERROR_USER(100401003, "支付交易单用户不正确"), - - PAY_TRANSACTION_EXTENSION_NOT_FOUND(100401050, "支付交易拓展单不存在"), - PAY_TRANSACTION_EXTENSION_STATUS_IS_NOT_WAITING(100401051, "支付交易拓展单不处于待支付"), - PAY_TRANSACTION_EXTENSION_STATUS_IS_NOT_SUCCESS(100401052, "支付交易单不处于已支付"), - - // ========== TRANSACTION REFUND 模块 ========== - PAY_REFUND_PRICE_EXCEED(100402000, "退款金额超过支付交易单可退金额"), - PAY_REFUND_NOT_FOUND(100402001, "退款单不存在"), - PAY_REFUND_STATUS_NOT_WAITING(100402002, "退款单不处于待处理"), - ; - - private final int code; - private final String message; - - PayErrorCodeEnum(int code, String message) { - this.code = code; - this.message = message; - } - - public int getCode() { - return code; - } - - public String getMessage() { - return message; - } - -} diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/convert/PayTransactionConvert.java b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/convert/PayTransactionConvert.java deleted file mode 100644 index 9b35b4680..000000000 --- a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/convert/PayTransactionConvert.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.mall.pay.biz.convert; - -import cn.iocoder.mall.pay.api.bo.transaction.PayTransactionBO; -import cn.iocoder.mall.pay.api.dto.transaction.PayTransactionCreateDTO; -import cn.iocoder.mall.pay.api.dto.transaction.PayTransactionSubmitDTO; -import cn.iocoder.mall.pay.biz.dataobject.PayTransactionDO; -import cn.iocoder.mall.pay.biz.dataobject.PayTransactionExtensionDO; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface PayTransactionConvert { - - PayTransactionConvert INSTANCE = Mappers.getMapper(PayTransactionConvert.class); - - @Mappings({}) - PayTransactionDO convert(PayTransactionCreateDTO payTransactionCreateDTO); - - @Mappings({}) - PayTransactionBO convert(PayTransactionDO payTransactionDO); - - @Mappings({}) - List convertList(List list); - - @Mappings({}) - PayTransactionExtensionDO convert(PayTransactionSubmitDTO payTransactionSubmitDTO); - -} diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dao/PayTransactionMapper.java b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dao/PayTransactionMapper.java index cd6c8a996..e5fbccca1 100644 --- a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dao/PayTransactionMapper.java +++ b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/dao/PayTransactionMapper.java @@ -11,20 +11,12 @@ import java.util.List; @Repository public interface PayTransactionMapper { - void insert(PayTransactionDO entity); - int update(@Param("entity") PayTransactionDO entity, @Param("whereStatus") Integer whereStatus); int updateForRefundTotal(@Param("id") Integer id, @Param("refundTotalIncr") Integer refundTotalIncr); - PayTransactionDO selectByAppIdAndOrderId(@Param("appId") String appId, - @Param("orderId") String orderId); - - PayTransactionDO selectById(@Param("id") Integer id); - - List selectListByIds(@Param("ids") Collection ids); List selectListByPage(@Param("createBeginTime") Date createBeginTime, @Param("createEndTime") Date createEndTime, diff --git a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/service/PayTransactionServiceImpl.java b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/service/PayTransactionServiceImpl.java index 310012408..922f9c286 100644 --- a/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/service/PayTransactionServiceImpl.java +++ b/pay/pay-service-impl/src/main/java/cn/iocoder/mall/pay/biz/service/PayTransactionServiceImpl.java @@ -79,29 +79,6 @@ public class PayTransactionServiceImpl implements PayTransactionService { return PayTransactionConvert.INSTANCE.convert(payTransaction); } - @Override - @SuppressWarnings("Duplicates") - public PayTransactionBO createTransaction(PayTransactionCreateDTO payTransactionCreateDTO) { - // 校验 App - PayAppDO payAppDO = payAppService.validPayApp(payTransactionCreateDTO.getAppId()); - // 插入 PayTransactionDO - PayTransactionDO payTransaction = payTransactionMapper.selectByAppIdAndOrderId( - payTransactionCreateDTO.getAppId(), payTransactionCreateDTO.getOrderId()); - if (payTransaction != null) { - logger.warn("[createTransaction][appId({}) orderId({}) exists]", payTransactionCreateDTO.getAppId(), - payTransactionCreateDTO.getOrderId()); // 理论来说,不会出现这个情况 - // TODO 芋艿 可能要考虑,更新订单。例如说,业务线订单可以修改价格 - } else { - payTransaction = PayTransactionConvert.INSTANCE.convert(payTransactionCreateDTO); - payTransaction.setStatus(PayTransactionStatusEnum.WAITING.getValue()) - .setNotifyUrl(payAppDO.getNotifyUrl()); - payTransaction.setCreateTime(new Date()); - payTransactionMapper.insert(payTransaction); - } - // 返回成功 - return PayTransactionConvert.INSTANCE.convert(payTransaction); - } - @Override @SuppressWarnings("Duplicates") public PayTransactionSubmitBO submitTransaction(PayTransactionSubmitDTO payTransactionSubmitDTO) { diff --git a/pay/pay-service-impl/src/main/resources/config/application.properties b/pay/pay-service-impl/src/main/resources/config/application.properties deleted file mode 100644 index 125191e02..000000000 --- a/pay/pay-service-impl/src/main/resources/config/application.properties +++ /dev/null @@ -1 +0,0 @@ -##################### 业务模块 ##################### \ No newline at end of file diff --git a/pay/pay-service-impl/src/main/resources/config/application.yaml b/pay/pay-service-impl/src/main/resources/config/application.yaml deleted file mode 100644 index 7817d28fd..000000000 --- a/pay/pay-service-impl/src/main/resources/config/application.yaml +++ /dev/null @@ -1,65 +0,0 @@ -spring: - # datasource - datasource: - url: jdbc:mysql://s1.iocoder.cn:3306/mall_pay?useSSL=false&useUnicode=true&characterEncoding=UTF-8 - driver-class-name: com.mysql.jdbc.Driver - username: root - password: 3WLiVUBEwTbvAfsh - - # Spring Cloud 配置项 - cloud: - nacos: - # Spring Cloud Nacos Discovery 配置项 - discovery: - server-addr: s1.iocoder.cn:8848 # Nacos 服务器地址 - -# mybatis -mybatis-plus: - config-location: classpath:mybatis-config.xml - mapper-locations: classpath:mapper/*.xml - type-aliases-package: cn.iocoder.mall.pay.biz.dataobject - -# Dubbo 配置项 -dubbo: - # Dubbo 注册中心 - registry: - address: spring-cloud://s1.iocoder.cn:8848 # 指定 Dubbo 服务注册中心的地址 - # Spring Cloud Alibaba Dubbo 专属配置 - cloud: - subscribed-services: admin-application # 设置订阅的应用列表,默认为 * 订阅所有应用 - # Dubbo 提供者的协议 - protocol: - name: dubbo - port: -1 - # Dubbo 提供服务的扫描基础包 - scan: - base-packages: cn.iocoder.mall.pay.biz.service - # Dubbo 服务提供者的配置 - provider: - filter: -exception - PayTransactionService: - version: 1.0.0 - PayRefundService: - version: 1.0.0 - -# rocketmq -rocketmq: - name-server: s1.iocoder.cn:9876 - producer: - group: pay-producer-group - -# Seata 配置项 -seata: - tx-service-group: default # Seata 事务组编号,用于 TC 集群名 - # 服务配置项,对应 ServiceProperties 类 - service: - # 虚拟组和分组的映射 - vgroup-mapping: - default: default - # Seata 注册中心配置项 - registry: - type: nacos # 注册中心类型 - nacos: - serverAddr: ${spring.cloud.nacos.discovery.server-addr} # Nacos 服务地址 - namespace: # Nacos 命名空间 - cluster: default # 使用的 Seata 分组 diff --git a/pay/pay-service-impl/src/main/resources/mapper/PayAppMapper.xml b/pay/pay-service-impl/src/main/resources/mapper/PayAppMapper.xml deleted file mode 100644 index b01ab537e..000000000 --- a/pay/pay-service-impl/src/main/resources/mapper/PayAppMapper.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - id, name, notify_url, refund_notify_url, status, create_time - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/trade-service-project/trade-service-app/pom.xml b/trade-service-project/trade-service-app/pom.xml index cb48a90b6..3146fe4a0 100644 --- a/trade-service-project/trade-service-app/pom.xml +++ b/trade-service-project/trade-service-app/pom.xml @@ -17,11 +17,17 @@ mall-spring-boot-starter-dubbo + + + cn.iocoder.mall + trade-service-api + + cn.iocoder.mall system-service-api - ${project.version} + 1.0-SNAPSHOT @@ -39,9 +45,10 @@ - + cn.iocoder.mall - trade-service-api + pay-service-api + 1.0-SNAPSHOT diff --git a/trade-service-project/trade-service-app/src/main/java/cn/iocoder/mall/tradeservice/client/pay/PayTransactionClient.java b/trade-service-project/trade-service-app/src/main/java/cn/iocoder/mall/tradeservice/client/pay/PayTransactionClient.java new file mode 100644 index 000000000..f74b06783 --- /dev/null +++ b/trade-service-project/trade-service-app/src/main/java/cn/iocoder/mall/tradeservice/client/pay/PayTransactionClient.java @@ -0,0 +1,21 @@ +package cn.iocoder.mall.tradeservice.client.pay; + +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.payservice.rpc.transaction.PayTransactionRpc; +import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Service; + +@Service +public class PayTransactionClient { + + @DubboReference(version = "${dubbo.consumer.PayTransactionRpc.version}") + private PayTransactionRpc payTransactionRpc; + + public Integer createPayTransaction(PayTransactionCreateReqDTO createReqDTO) { + CommonResult createPayTransactionResult = payTransactionRpc.createPayTransaction(createReqDTO); + createPayTransactionResult.checkError(); + return createPayTransactionResult.getData(); + } + +} diff --git a/trade-service-project/trade-service-app/src/main/java/cn/iocoder/mall/tradeservice/config/TradeBizProperties.java b/trade-service-project/trade-service-app/src/main/java/cn/iocoder/mall/tradeservice/config/TradeBizProperties.java new file mode 100644 index 000000000..98ea388fa --- /dev/null +++ b/trade-service-project/trade-service-app/src/main/java/cn/iocoder/mall/tradeservice/config/TradeBizProperties.java @@ -0,0 +1,30 @@ +package cn.iocoder.mall.tradeservice.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; +import org.springframework.validation.annotation.Validated; + +import javax.validation.constraints.NotNull; + +@Component +@ConfigurationProperties("biz") +@Validated +@Data +public class TradeBizProperties { + + /** + * 支付应用编号 + * + * 由 pay-service 支付系统提供 + */ + @NotNull(message = "支付应用编号不能为空") + private String payAppId; + + /** + * 支付超时时间,单位:分 + */ + @NotNull(message = "支付超时时间不能为空") + private Integer payExpireTime; + +} diff --git a/trade-service-project/trade-service-app/src/main/java/cn/iocoder/mall/tradeservice/service/order/impl/TradeOrderServiceImpl.java b/trade-service-project/trade-service-app/src/main/java/cn/iocoder/mall/tradeservice/service/order/impl/TradeOrderServiceImpl.java index 6bc73c094..747c16527 100644 --- a/trade-service-project/trade-service-app/src/main/java/cn/iocoder/mall/tradeservice/service/order/impl/TradeOrderServiceImpl.java +++ b/trade-service-project/trade-service-app/src/main/java/cn/iocoder/mall/tradeservice/service/order/impl/TradeOrderServiceImpl.java @@ -5,14 +5,17 @@ import cn.iocoder.common.framework.util.CollectionUtils; import cn.iocoder.common.framework.util.DateUtil; import cn.iocoder.common.framework.util.MathUtil; import cn.iocoder.common.framework.vo.PageResult; +import cn.iocoder.mall.payservice.rpc.transaction.dto.PayTransactionCreateReqDTO; import cn.iocoder.mall.productservice.enums.sku.ProductSkuDetailFieldEnum; import cn.iocoder.mall.productservice.rpc.sku.dto.ProductSkuRespDTO; import cn.iocoder.mall.promotion.api.rpc.price.dto.PriceProductCalcReqDTO; import cn.iocoder.mall.promotion.api.rpc.price.dto.PriceProductCalcRespDTO; +import cn.iocoder.mall.tradeservice.client.pay.PayTransactionClient; import cn.iocoder.mall.tradeservice.client.product.ProductSkuClient; import cn.iocoder.mall.tradeservice.client.promotion.CouponCardClient; import cn.iocoder.mall.tradeservice.client.promotion.PriceClient; import cn.iocoder.mall.tradeservice.client.user.UserAddressClient; +import cn.iocoder.mall.tradeservice.config.TradeBizProperties; import cn.iocoder.mall.tradeservice.convert.order.TradeOrderConvert; import cn.iocoder.mall.tradeservice.dal.mysql.dataobject.order.TradeOrderDO; import cn.iocoder.mall.tradeservice.dal.mysql.dataobject.order.TradeOrderItemDO; @@ -61,6 +64,11 @@ public class TradeOrderServiceImpl implements TradeOrderService { private PriceClient priceClient; @Autowired private CouponCardClient couponCardClient; + @Autowired + private PayTransactionClient payTransactionClient; + + @Autowired + private TradeBizProperties tradeBizProperties; @Override // @GlobalTransactional TODO 芋艿,使用 seata 实现分布式事务 @@ -92,15 +100,15 @@ public class TradeOrderServiceImpl implements TradeOrderService { } // 创建交易订单(本地事务) - Integer tradeOrderId = self.createTradeOrder0(createReqDTO, listProductSkus, priceProductCalcRespDTO, userAddressRespDTO); + TradeOrderDO tradeOrderDO = self.createTradeOrder0(createReqDTO, listProductSkus, priceProductCalcRespDTO, userAddressRespDTO); // 创建支付订单,对接支付服务 - createPayTransaction(); - return tradeOrderId; + createPayTransaction(tradeOrderDO, createReqDTO, listProductSkus); + return tradeOrderDO.getId(); } @Transactional - public Integer createTradeOrder0(TradeOrderCreateReqDTO createReqDTO, List listProductSkus, + public TradeOrderDO createTradeOrder0(TradeOrderCreateReqDTO createReqDTO, List listProductSkus, PriceProductCalcRespDTO priceProductCalcRespDTO, UserAddressRespDTO userAddressRespDTO) { // 构建 TradeOrderDO 对象,并进行保存 TradeOrderDO tradeOrderDO = new TradeOrderDO(); @@ -154,11 +162,24 @@ public class TradeOrderServiceImpl implements TradeOrderService { // 最终保存 tradeOrderItemMapper.insertList(tradeOrderItemDOs); - return tradeOrderDO.getId(); + return tradeOrderDO; } - private void createPayTransaction() { + private void createPayTransaction(TradeOrderDO tradeOrderDO, TradeOrderCreateReqDTO createReqDTO, + List listProductSkus) { + // 创建支付单 + String orderSubject = listProductSkus.get(0).getSpu().getName(); + Date expireTime = DateUtil.addDate(Calendar.MINUTE, tradeBizProperties.getPayExpireTime()); + Integer payTransactionId = payTransactionClient.createPayTransaction( + new PayTransactionCreateReqDTO().setCreateIp(createReqDTO.getIp()).setAppId(tradeBizProperties.getPayAppId()) + .setOrderId(tradeOrderDO.getId().toString()).setExpireTime(expireTime) + .setPrice(tradeOrderDO.getPresentPrice()).setOrderSubject(orderSubject) + .setOrderMemo("测试备注") // TODO 芋艿,后面补充 + .setOrderDescription("测试描述") // TODO 芋艿,后面补充 + ); + // 更新 + tradeOrderMapper.updateById(new TradeOrderDO().setId(tradeOrderDO.getId()).setPayTransactionId(payTransactionId)); } private String generateTradeOrderNo() { diff --git a/trade-service-project/trade-service-app/src/main/resources/application.yaml b/trade-service-project/trade-service-app/src/main/resources/application.yaml index a999a53b7..41e0ac3ce 100644 --- a/trade-service-project/trade-service-app/src/main/resources/application.yaml +++ b/trade-service-project/trade-service-app/src/main/resources/application.yaml @@ -47,6 +47,8 @@ dubbo: version: 1.0.0 CouponCardRpc: version: 1.0.0 + PayTransactionRpc: + version: 1.0.0 # RocketMQ 配置项 rocketmq: @@ -66,3 +68,8 @@ mall: error-code: group: ${spring.application.name} constants-class: cn.iocoder.mall.tradeservice.enums.OrderErrorCodeConstants + +# 业务配置 +biz: + pay-app-id: POd4RC6a + pay-expire-time: 120