bodyObj = HttpUtil.decodeParamMap(body, StandardCharsets.UTF_8);
- AlipaySignature.rsaCheckV1(bodyObj, config.getAlipayPublicKey(),
- StandardCharsets.UTF_8.name(), "RSA2");
-
- // 2.1 退款的情况
- if (bodyObj.containsKey("refund_fee")) {
- return PayRefundNotifyRespDTO.builder().channelOrderNo(bodyObj.get("trade_no"))
- .tradeNo(bodyObj.get("out_trade_no")).reqNo(bodyObj.get("out_biz_no"))
- .status(PayNotifyRefundStatusEnum.SUCCESS)
- .refundSuccessTime(parseTime(params.get("gmt_refund")))
- .build();
- }
- // 2.2 支付的情况
- return PayOrderNotifyRespDTO.builder().orderExtensionNo(bodyObj.get("out_trade_no"))
- .channelOrderNo(bodyObj.get("trade_no")).channelUserId(bodyObj.get("seller_id"))
- .tradeStatus(bodyObj.get("trade_status")).successTime(parseTime(params.get("notify_time")))
- .build();
- }
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayAppPayClient.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayAppPayClient.java
deleted file mode 100644
index dfcde9b..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayAppPayClient.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.client.impl.alipay;
-
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedRespDTO;
-import co.yixiang.yshop.framework.pay.core.enums.PayChannelEnum;
-import co.yixiang.yshop.framework.pay.core.enums.PayDisplayModeEnum;
-import com.alipay.api.AlipayApiException;
-import com.alipay.api.domain.AlipayTradeAppPayModel;
-import com.alipay.api.request.AlipayTradeAppPayRequest;
-import com.alipay.api.response.AlipayTradeAppPayResponse;
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 支付宝【App 支付】的 PayClient 实现类
- *
- * 文档:App 支付
- *
- * // TODO yshop:未详细测试,因为手头没 App
- *
- * @author yshop
- */
-@Slf4j
-public class AlipayAppPayClient extends AbstractAlipayClient {
-
- public AlipayAppPayClient(Long channelId, AlipayPayClientConfig config) {
- super(channelId, PayChannelEnum.ALIPAY_APP.getCode(), config);
- }
-
- @Override
- public PayOrderUnifiedRespDTO doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) throws AlipayApiException {
- // 1.1 构建 AlipayTradeAppPayModel 请求
- AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
- // ① 通用的参数
- model.setOutTradeNo(reqDTO.getMerchantOrderId());
- model.setSubject(reqDTO.getSubject());
- model.setBody(reqDTO.getBody());
- model.setTotalAmount(formatAmount(reqDTO.getAmount()));
- model.setProductCode(" QUICK_MSECURITY_PAY"); // 销售产品码:无线快捷支付产品
- // ② 个性化的参数【无】
- // ③ 支付宝扫码支付只有一种展示
- String displayMode = PayDisplayModeEnum.APP.getMode();
-
- // 1.2 构建 AlipayTradePrecreateRequest 请求
- AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
- request.setBizModel(model);
- request.setNotifyUrl(reqDTO.getNotifyUrl());
- request.setReturnUrl(reqDTO.getReturnUrl());
-
- // 2.1 执行请求
- AlipayTradeAppPayResponse response = client.execute(request);
- // 2.2 处理结果
- validateSuccess(response);
- return new PayOrderUnifiedRespDTO()
- .setDisplayMode(displayMode).setDisplayContent("");
- }
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayBarPayClient.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayBarPayClient.java
deleted file mode 100644
index 8b33ef6..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayBarPayClient.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.client.impl.alipay;
-
-import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.util.StrUtil;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedRespDTO;
-import co.yixiang.yshop.framework.pay.core.enums.PayChannelEnum;
-import co.yixiang.yshop.framework.pay.core.enums.PayDisplayModeEnum;
-import com.alipay.api.AlipayApiException;
-import com.alipay.api.domain.AlipayTradePayModel;
-import com.alipay.api.request.AlipayTradePayRequest;
-import com.alipay.api.response.AlipayTradePayResponse;
-import lombok.extern.slf4j.Slf4j;
-
-import static co.yixiang.yshop.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST;
-import static co.yixiang.yshop.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static co.yixiang.yshop.framework.common.exception.util.ServiceExceptionUtil.exception0;
-
-/**
- * 支付宝【条码支付】的 PayClient 实现类
- *
- * 文档:当面付
- *
- * @author yshop
- */
-@Slf4j
-public class AlipayBarPayClient extends AbstractAlipayClient {
-
- public AlipayBarPayClient(Long channelId, AlipayPayClientConfig config) {
- super(channelId, PayChannelEnum.ALIPAY_BAR.getCode(), config);
- }
-
- @Override
- public PayOrderUnifiedRespDTO doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) throws AlipayApiException {
- String authCode = MapUtil.getStr(reqDTO.getChannelExtras(), "auth_code");
- if (StrUtil.isEmpty(authCode)) {
- throw exception0(BAD_REQUEST.getCode(), "条形码不能为空");
- }
-
- // 1.1 构建 AlipayTradePayModel 请求
- AlipayTradePayModel model = new AlipayTradePayModel();
- // ① 通用的参数
- model.setOutTradeNo(reqDTO.getMerchantOrderId());
- model.setSubject(reqDTO.getSubject());
- model.setBody(reqDTO.getBody());
- model.setTotalAmount(formatAmount(reqDTO.getAmount()));
- model.setScene("bar_code"); // 当面付条码支付场景
- // ② 个性化的参数
- model.setAuthCode(authCode);
- // ③ 支付宝条码支付只有一种展示
- String displayMode = PayDisplayModeEnum.BAR_CODE.getMode();
-
- // 1.2 构建 AlipayTradePayRequest 请求
- AlipayTradePayRequest request = new AlipayTradePayRequest();
- request.setBizModel(model);
- request.setNotifyUrl(reqDTO.getNotifyUrl());
- request.setReturnUrl(reqDTO.getReturnUrl());
-
- // 2.1 执行请求
- AlipayTradePayResponse response = client.execute(request);
- // 2.2 处理结果
- validateSuccess(response);
- return new PayOrderUnifiedRespDTO()
- .setDisplayMode(displayMode).setDisplayContent("");
- }
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayPayClientConfig.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayPayClientConfig.java
deleted file mode 100644
index 14691cc..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayPayClientConfig.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.client.impl.alipay;
-
-import co.yixiang.yshop.framework.pay.core.client.PayClientConfig;
-import lombok.Data;
-
-import javax.validation.ConstraintViolation;
-import javax.validation.Validator;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.util.Set;
-
-// TODO yshop:参数校验
-
-/**
- * 支付宝的 PayClientConfig 实现类
- * 属性主要来自 {@link com.alipay.api.AlipayConfig} 的必要属性
- *
- * @author yshop
- */
-@Data
-public class AlipayPayClientConfig implements PayClientConfig {
-
- /**
- * 网关地址 - 线上
- */
- public static final String SERVER_URL_PROD = "https://openapi.alipay.com/gateway.do";
- /**
- * 网关地址 - 沙箱
- */
- public static final String SERVER_URL_SANDBOX = "https://openapi.alipaydev.com/gateway.do";
-
- /**
- * 公钥类型 - 公钥模式
- */
- public static final Integer MODE_PUBLIC_KEY = 1;
- /**
- * 公钥类型 - 证书模式
- */
- public static final Integer MODE_CERTIFICATE = 2;
-
- /**
- * 签名算法类型 - RSA
- */
- public static final String SIGN_TYPE_DEFAULT = "RSA2";
-
- /**
- * 网关地址
- * 1. {@link #SERVER_URL_PROD}
- * 2. {@link #SERVER_URL_SANDBOX}
- */
- @NotBlank(message = "网关地址不能为空", groups = {ModePublicKey.class, ModeCertificate.class})
- private String serverUrl;
-
- /**
- * 开放平台上创建的应用的 ID
- */
- @NotBlank(message = "开放平台上创建的应用的 ID不能为空", groups = {ModePublicKey.class, ModeCertificate.class})
- private String appId;
-
- /**
- * 签名算法类型,推荐:RSA2
- *
- * {@link #SIGN_TYPE_DEFAULT}
- */
- @NotBlank(message = "签名算法类型不能为空", groups = {ModePublicKey.class, ModeCertificate.class})
- private String signType;
-
- /**
- * 公钥类型
- * 1. {@link #MODE_PUBLIC_KEY} 情况,privateKey + alipayPublicKey
- * 2. {@link #MODE_CERTIFICATE} 情况,appCertContent + alipayPublicCertContent + rootCertContent
- */
- @NotNull(message = "公钥类型不能为空", groups = {ModePublicKey.class, ModeCertificate.class})
- private Integer mode;
-
- // ========== 公钥模式 ==========
- /**
- * 商户私钥
- */
- @NotBlank(message = "商户私钥不能为空", groups = {ModePublicKey.class})
- private String privateKey;
-
- /**
- * 支付宝公钥字符串
- */
- @NotBlank(message = "支付宝公钥字符串不能为空", groups = {ModePublicKey.class})
- private String alipayPublicKey;
-
- // ========== 证书模式 ==========
- /**
- * 指定商户公钥应用证书内容字符串
- */
- @NotBlank(message = "指定商户公钥应用证书内容不能为空", groups = {ModeCertificate.class})
- private String appCertContent;
- /**
- * 指定支付宝公钥证书内容字符串
- */
- @NotBlank(message = "指定支付宝公钥证书内容不能为空", groups = {ModeCertificate.class})
- private String alipayPublicCertContent;
- /**
- * 指定根证书内容字符串
- */
- @NotBlank(message = "指定根证书内容字符串不能为空", groups = {ModeCertificate.class})
- private String rootCertContent;
-
- public interface ModePublicKey {
- }
-
- public interface ModeCertificate {
- }
-
- @Override
- public Set> verifyParam(Validator validator) {
- return validator.validate(this,
- MODE_PUBLIC_KEY.equals(this.getMode()) ? ModePublicKey.class : ModeCertificate.class);
- }
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayPcPayClient.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayPcPayClient.java
deleted file mode 100644
index 718148f..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayPcPayClient.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.client.impl.alipay;
-
-import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.http.Method;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedRespDTO;
-import co.yixiang.yshop.framework.pay.core.enums.PayChannelEnum;
-import co.yixiang.yshop.framework.pay.core.enums.PayDisplayModeEnum;
-import com.alipay.api.AlipayApiException;
-import com.alipay.api.domain.AlipayTradePagePayModel;
-import com.alipay.api.request.AlipayTradePagePayRequest;
-import com.alipay.api.response.AlipayTradePagePayResponse;
-import lombok.extern.slf4j.Slf4j;
-
-import java.util.Objects;
-
-/**
- * 支付宝【PC 网站】的 PayClient 实现类
- *
- * 文档:电脑网站支付
- *
- * @author XGD
- */
-@Slf4j
-public class AlipayPcPayClient extends AbstractAlipayClient {
-
- public AlipayPcPayClient(Long channelId, AlipayPayClientConfig config) {
- super(channelId, PayChannelEnum.ALIPAY_PC.getCode(), config);
- }
-
- @Override
- public PayOrderUnifiedRespDTO doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) throws AlipayApiException {
- // 1.1 构建 AlipayTradePagePayModel 请求
- AlipayTradePagePayModel model = new AlipayTradePagePayModel();
- // ① 通用的参数
- model.setOutTradeNo(reqDTO.getMerchantOrderId());
- model.setSubject(reqDTO.getSubject());
- model.setBody(reqDTO.getBody());
- model.setTotalAmount(formatAmount(reqDTO.getAmount()));
- model.setTimeExpire(formatTime(reqDTO.getExpireTime()));
- model.setProductCode("FAST_INSTANT_TRADE_PAY"); // 销售产品码. 目前 PC 支付场景下仅支持 FAST_INSTANT_TRADE_PAY
- // ② 个性化的参数
- // 参考 https://www.pingxx.com/api/支付渠道 extra 参数说明.html 的 alipay_pc_direct 部分
- model.setQrPayMode(MapUtil.getStr(reqDTO.getChannelExtras(), "qr_pay_mode"));
- model.setQrcodeWidth(MapUtil.getLong(reqDTO.getChannelExtras(), "qr_code_width"));
- // ③ 支付宝 PC 支付有多种展示模式,因此这里需要计算
- String displayMode = getDisplayMode(reqDTO.getDisplayMode(), model.getQrPayMode());
-
- // 1.2 构建 AlipayTradePagePayRequest 请求
- AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
- request.setBizModel(model);
- request.setNotifyUrl(reqDTO.getNotifyUrl());
- request.setReturnUrl(reqDTO.getReturnUrl());
-
- // 2.1 执行请求
- AlipayTradePagePayResponse response;
- if (Objects.equals(displayMode, PayDisplayModeEnum.FORM.getMode())) {
- response = client.pageExecute(request, Method.POST.name()); // 需要特殊使用 POST 请求
- } else {
- response = client.pageExecute(request, Method.GET.name());
- }
-
- // 2.2 处理结果
- validateSuccess(response);
- return new PayOrderUnifiedRespDTO().setDisplayMode(displayMode)
- .setDisplayContent(response.getBody());
- }
-
- /**
- * 获得最终的支付 UI 展示模式
- *
- * @param displayMode 前端传递的 UI 展示模式
- * @param qrPayMode 前端传递的二维码模式
- * @return 最终的支付 UI 展示模式
- */
- private String getDisplayMode(String displayMode, String qrPayMode) {
- // 1.1 支付宝二维码的前置模式
- if (StrUtil.equalsAny(qrPayMode, "0", "1", "3", "4")) {
- return PayDisplayModeEnum.IFRAME.getMode();
- }
- // 1.2 支付宝二维码的跳转模式
- if (StrUtil.equals(qrPayMode, "2")) {
- return PayDisplayModeEnum.URL.getMode();
- }
- // 2. 前端传递了 UI 展示模式
- return displayMode != null ? displayMode :
- PayDisplayModeEnum.URL.getMode(); // 模式使用 URL 跳转
- }
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayQrPayClient.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayQrPayClient.java
deleted file mode 100644
index 2edf2f9..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayQrPayClient.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.client.impl.alipay;
-
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedRespDTO;
-import co.yixiang.yshop.framework.pay.core.enums.PayChannelEnum;
-import co.yixiang.yshop.framework.pay.core.enums.PayDisplayModeEnum;
-import com.alipay.api.AlipayApiException;
-import com.alipay.api.domain.AlipayTradePrecreateModel;
-import com.alipay.api.request.AlipayTradePrecreateRequest;
-import com.alipay.api.response.AlipayTradePrecreateResponse;
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 支付宝【扫码支付】的 PayClient 实现类
- *
- * 文档:扫码支付
- *
- * @author yshop
- */
-@Slf4j
-public class AlipayQrPayClient extends AbstractAlipayClient {
-
- public AlipayQrPayClient(Long channelId, AlipayPayClientConfig config) {
- super(channelId, PayChannelEnum.ALIPAY_QR.getCode(), config);
- }
-
- @Override
- public PayOrderUnifiedRespDTO doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) throws AlipayApiException {
- // 1.1 构建 AlipayTradePrecreateModel 请求
- AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
- // ① 通用的参数
- model.setOutTradeNo(reqDTO.getMerchantOrderId());
- model.setSubject(reqDTO.getSubject());
- model.setBody(reqDTO.getBody());
- model.setTotalAmount(formatAmount(reqDTO.getAmount()));
- model.setProductCode("FACE_TO_FACE_PAYMENT"); // 销售产品码. 目前扫码支付场景下仅支持 FACE_TO_FACE_PAYMENT
- // ② 个性化的参数【无】
- // ③ 支付宝扫码支付只有一种展示,考虑到前端可能希望二维码扫描后,手机打开
- String displayMode = PayDisplayModeEnum.QR_CODE.getMode();
-
- // 1.2 构建 AlipayTradePrecreateRequest 请求
- AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
- request.setBizModel(model);
- request.setNotifyUrl(reqDTO.getNotifyUrl());
- request.setReturnUrl(reqDTO.getReturnUrl());
-
- // 2.1 执行请求
- AlipayTradePrecreateResponse response = client.execute(request);
- // 2.2 处理结果
- validateSuccess(response);
- return new PayOrderUnifiedRespDTO()
- .setDisplayMode(displayMode).setDisplayContent(response.getQrCode());
- }
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayWapPayClient.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayWapPayClient.java
deleted file mode 100644
index 98cfae5..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/alipay/AlipayWapPayClient.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.client.impl.alipay;
-
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.http.Method;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedRespDTO;
-import co.yixiang.yshop.framework.pay.core.enums.PayChannelEnum;
-import co.yixiang.yshop.framework.pay.core.enums.PayDisplayModeEnum;
-import com.alipay.api.AlipayApiException;
-import com.alipay.api.domain.AlipayTradeWapPayModel;
-import com.alipay.api.request.AlipayTradeWapPayRequest;
-import com.alipay.api.response.AlipayTradeWapPayResponse;
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * 支付宝【Wap 网站】的 PayClient 实现类
- *
- * 文档:手机网站支付接口
- *
- * @author yshop
- */
-@Slf4j
-public class AlipayWapPayClient extends AbstractAlipayClient {
-
- public AlipayWapPayClient(Long channelId, AlipayPayClientConfig config) {
- super(channelId, PayChannelEnum.ALIPAY_WAP.getCode(), config);
- }
-
- @Override
- public PayOrderUnifiedRespDTO doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) throws AlipayApiException {
- // 1.1 构建 AlipayTradeWapPayModel 请求
- AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
- // ① 通用的参数
- model.setOutTradeNo(reqDTO.getMerchantOrderId());
- model.setSubject(reqDTO.getSubject());
- model.setBody(reqDTO.getBody());
- model.setTotalAmount(formatAmount(reqDTO.getAmount()));
- model.setProductCode("QUICK_WAP_PAY"); // 销售产品码. 目前 Wap 支付场景下仅支持 QUICK_WAP_PAY
- // ② 个性化的参数【无】
- // ③ 支付宝 Wap 支付只有一种展示,考虑到前端可能希望二维码扫描后,手机打开
- String displayMode = ObjectUtil.defaultIfNull(reqDTO.getDisplayMode(),
- PayDisplayModeEnum.URL.getMode());
-
- // 1.2 构建 AlipayTradeWapPayRequest 请求
- AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
- request.setBizModel(model);
- request.setNotifyUrl(reqDTO.getNotifyUrl());
- request.setReturnUrl(reqDTO.getReturnUrl());
- model.setQuitUrl(reqDTO.getReturnUrl());
-
- // 2.1 执行请求
- AlipayTradeWapPayResponse response = client.pageExecute(request, Method.GET.name());
-
- // 2.2 处理结果
- validateSuccess(response);
- return new PayOrderUnifiedRespDTO()
- .setDisplayMode(displayMode).setDisplayContent(response.getBody());
- }
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/wx/WXLitePayClient.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/wx/WXLitePayClient.java
deleted file mode 100644
index e8c2050..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/wx/WXLitePayClient.java
+++ /dev/null
@@ -1,198 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.client.impl.wx;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.date.LocalDateTimeUtil;
-import cn.hutool.core.lang.Assert;
-import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.util.StrUtil;
-import co.yixiang.yshop.framework.common.util.io.FileUtils;
-import co.yixiang.yshop.framework.pay.core.client.dto.notify.PayNotifyReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.notify.PayOrderNotifyRespDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.notify.PayRefundNotifyRespDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedRespDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.refund.PayRefundUnifiedReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.refund.PayRefundUnifiedRespDTO;
-import co.yixiang.yshop.framework.pay.core.client.impl.AbstractPayClient;
-import co.yixiang.yshop.framework.pay.core.enums.PayChannelEnum;
-import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
-import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyV3Result;
-import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
-import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
-import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
-import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result;
-import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
-import com.github.binarywang.wxpay.config.WxPayConfig;
-import com.github.binarywang.wxpay.constant.WxPayConstants;
-import com.github.binarywang.wxpay.exception.WxPayException;
-import com.github.binarywang.wxpay.service.WxPayService;
-import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
-import lombok.extern.slf4j.Slf4j;
-
-import java.time.ZoneId;
-import java.util.Date;
-import java.util.Objects;
-
-/**
- * 微信小程序下支付
- *
- * @author zwy
- */
-@Slf4j
-public class WXLitePayClient extends AbstractPayClient {
-
- private WxPayService client;
-
- public WXLitePayClient(Long channelId, WXPayClientConfig config) {
- super(channelId, PayChannelEnum.WX_LITE.getCode(), config);
- }
-
- @Override
- protected void doInit() {
- WxPayConfig payConfig = new WxPayConfig();
- BeanUtil.copyProperties(config, payConfig, "privateKeyContent","privateCertContent");
- payConfig.setTradeType(WxPayConstants.TradeType.JSAPI); // 设置使用 JS API 支付方式
-// if (StrUtil.isNotEmpty(config.getKeyContent())) {
-// payConfig.setKeyContent(config.getKeyContent().getBytes(StandardCharsets.UTF_8));
-// }
- if (StrUtil.isNotEmpty(config.getPrivateKeyContent())) {
- // weixin-pay-java 存在 BUG,无法直接设置内容,所以创建临时文件来解决
- payConfig.setPrivateKeyPath(FileUtils.createTempFile(config.getPrivateKeyContent()).getPath());
- }
- if (StrUtil.isNotEmpty(config.getPrivateCertContent())) {
- // weixin-pay-java 存在 BUG,无法直接设置内容,所以创建临时文件来解决
- payConfig.setPrivateCertPath(FileUtils.createTempFile(config.getPrivateCertContent()).getPath());
- }
- // 真实客户端
- this.client = new WxPayServiceImpl();
- client.setConfig(payConfig);
- }
-
- @Override
- public PayOrderUnifiedRespDTO doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) {
- throw new UnsupportedOperationException();
-// WxPayMpOrderResult response;
-// try {
-// switch (config.getApiVersion()) {
-// case WXPayClientConfig.API_VERSION_V2:
-// response = this.unifiedOrderV2(reqDTO);
-// break;
-// case WXPayClientConfig.API_VERSION_V3:
-// WxPayUnifiedOrderV3Result.JsapiResult responseV3 = this.unifiedOrderV3(reqDTO);
-// // 将 V3 的结果,统一转换成 V2。返回的字段是一致的
-// response = new WxPayMpOrderResult();
-// BeanUtil.copyProperties(responseV3, response, true);
-// break;
-// default:
-// throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
-// }
-// } catch (WxPayException e) {
-// log.error("[unifiedOrder][request({}) 发起支付失败,原因({})]", toJsonString(reqDTO), e);
-// return PayCommonResult.build(ObjectUtils.defaultIfNull(e.getErrCode(), e.getReturnCode(), "CustomErrorCode"),
-// ObjectUtils.defaultIfNull(e.getErrCodeDes(), e.getCustomErrorMsg()), null, codeMapping);
-// }
-// return PayCommonResult.build(CODE_SUCCESS, MESSAGE_SUCCESS, response, codeMapping);
- }
-
- private WxPayMpOrderResult unifiedOrderV2(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {
- // 构建 WxPayUnifiedOrderRequest 对象
- WxPayUnifiedOrderRequest request = WxPayUnifiedOrderRequest.newBuilder()
- .outTradeNo(reqDTO.getMerchantOrderId())
- .body(reqDTO.getBody())
- .totalFee(reqDTO.getAmount().intValue()) // 单位分
- .timeExpire(DateUtil.format(reqDTO.getExpireTime(), "yyyyMMddHHmmss")) // v2的时间格式
- .spbillCreateIp(reqDTO.getUserIp())
- .openid(getOpenid(reqDTO))
- .notifyUrl(reqDTO.getNotifyUrl())
- .build();
- // 执行请求
- return client.createOrder(request);
- }
-
- private WxPayUnifiedOrderV3Result.JsapiResult unifiedOrderV3(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {
- // 构建 WxPayUnifiedOrderRequest 对象
- WxPayUnifiedOrderV3Request request = new WxPayUnifiedOrderV3Request();
- request.setOutTradeNo(reqDTO.getMerchantOrderId());
-
- request.setDescription(reqDTO.getBody());
- request.setAmount(new WxPayUnifiedOrderV3Request
- .Amount()
- .setTotal(reqDTO
- .getAmount()
- .intValue())); // 单位分
- request.setTimeExpire(DateUtil.format(Date.from(reqDTO.getExpireTime().atZone(ZoneId.systemDefault()).toInstant()), "yyyy-MM-dd'T'HH:mm:ssXXX")); // v3的时间格式
- request.setPayer(new WxPayUnifiedOrderV3Request.Payer().setOpenid(getOpenid(reqDTO)));
- request.setSceneInfo(new WxPayUnifiedOrderV3Request.SceneInfo().setPayerClientIp(reqDTO.getUserIp()));
- request.setNotifyUrl(reqDTO.getNotifyUrl());
- // 执行请求
- return client.createOrderV3(TradeTypeEnum.JSAPI, request);
- }
-
- private static String getOpenid(PayOrderUnifiedReqDTO reqDTO) {
- String openid = MapUtil.getStr(reqDTO.getChannelExtras(), "openid");
- if (StrUtil.isEmpty(openid)) {
- throw new IllegalArgumentException("支付请求的 openid 不能为空!");
- }
- return openid;
- }
-
- /**
- *
- * 微信支付回调 分 v2 和v3 的处理方式
- *
- * @param data 通知结果
- * @return 支付回调对象
- * @throws WxPayException 微信异常类
- */
-// @Override
- public PayOrderNotifyRespDTO parseOrderNotify(PayNotifyReqDTO data) throws WxPayException {
- log.info("[parseOrderNotify][微信支付回调data数据:{}]", data.getBody());
- // 微信支付 v2 回调结果处理
- switch (config.getApiVersion()) {
- case WXPayClientConfig.API_VERSION_V2:
- return parseOrderNotifyV2(data);
- case WXPayClientConfig.API_VERSION_V3:
- return parseOrderNotifyV3(data);
- default:
- throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
- }
- }
-
- private PayOrderNotifyRespDTO parseOrderNotifyV3(PayNotifyReqDTO data) throws WxPayException {
- WxPayOrderNotifyV3Result wxPayOrderNotifyV3Result = client.parseOrderNotifyV3Result(data.getBody(), null);
- WxPayOrderNotifyV3Result.DecryptNotifyResult result = wxPayOrderNotifyV3Result.getResult();
- // 转换结果
- Assert.isTrue(Objects.equals(wxPayOrderNotifyV3Result.getResult().getTradeState(), "SUCCESS"),
- "支付结果非 SUCCESS");
-
- return PayOrderNotifyRespDTO
- .builder()
- .orderExtensionNo(result.getOutTradeNo())
- .channelOrderNo(result.getTransactionId())
- .channelUserId(result.getPayer().getOpenid())
- .successTime(LocalDateTimeUtil.parse(result.getSuccessTime(), "yyyy-MM-dd'T'HH:mm:ssXXX"))
- .build();
- }
-
- private PayOrderNotifyRespDTO parseOrderNotifyV2(PayNotifyReqDTO data) throws WxPayException {
- WxPayOrderNotifyResult notifyResult = client.parseOrderNotifyResult(data.getBody());
- Assert.isTrue(Objects.equals(notifyResult.getResultCode(), "SUCCESS"), "支付结果非 SUCCESS");
- // 转换结果
- return PayOrderNotifyRespDTO
- .builder()
- .orderExtensionNo(notifyResult.getOutTradeNo())
- .channelOrderNo(notifyResult.getTransactionId())
- .channelUserId(notifyResult.getOpenid())
- .successTime(LocalDateTimeUtil.parse(notifyResult.getTimeEnd(), "yyyyMMddHHmmss"))
- .build();
-
- }
-
- @Override
- protected PayRefundUnifiedRespDTO doUnifiedRefund(PayRefundUnifiedReqDTO reqDTO) {
- //TODO 需要实现
- throw new UnsupportedOperationException();
- }
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/wx/WXNativePayClient.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/wx/WXNativePayClient.java
deleted file mode 100644
index 4261120..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/wx/WXNativePayClient.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.client.impl.wx;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.date.LocalDateTimeUtil;
-import cn.hutool.core.lang.Assert;
-import cn.hutool.core.util.StrUtil;
-import co.yixiang.yshop.framework.common.util.io.FileUtils;
-import co.yixiang.yshop.framework.pay.core.client.dto.notify.PayNotifyReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.notify.PayOrderNotifyRespDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.notify.PayRefundNotifyRespDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedRespDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.refund.PayRefundUnifiedReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.refund.PayRefundUnifiedRespDTO;
-import co.yixiang.yshop.framework.pay.core.client.impl.AbstractPayClient;
-import co.yixiang.yshop.framework.pay.core.enums.PayChannelEnum;
-import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
-import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyV3Result;
-import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult;
-import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
-import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
-import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
-import com.github.binarywang.wxpay.config.WxPayConfig;
-import com.github.binarywang.wxpay.constant.WxPayConstants;
-import com.github.binarywang.wxpay.exception.WxPayException;
-import com.github.binarywang.wxpay.service.WxPayService;
-import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
-import lombok.extern.slf4j.Slf4j;
-
-import java.time.ZoneId;
-import java.util.Date;
-import java.util.Objects;
-
-/**
- * 微信 App 支付
- *
- * @author zwy
- */
-@Slf4j
-public class WXNativePayClient extends AbstractPayClient {
-
- private WxPayService client;
-
- public WXNativePayClient(Long channelId, WXPayClientConfig config) {
- super(channelId, PayChannelEnum.WX_NATIVE.getCode(), config);
- }
-
- @Override
- protected void doInit() {
- WxPayConfig payConfig = new WxPayConfig();
- BeanUtil.copyProperties(config, payConfig, "keyContent");
- payConfig.setTradeType(WxPayConstants.TradeType.NATIVE); // 设置使用 native 支付方式
-// if (StrUtil.isNotEmpty(config.getKeyContent())) {
-// payConfig.setKeyContent(config.getKeyContent().getBytes(StandardCharsets.UTF_8));
-// }
- if (StrUtil.isNotEmpty(config.getPrivateKeyContent())) {
- // weixin-pay-java 存在 BUG,无法直接设置内容,所以创建临时文件来解决
- payConfig.setPrivateKeyPath(FileUtils.createTempFile(config.getPrivateKeyContent()).getPath());
- }
- if (StrUtil.isNotEmpty(config.getPrivateCertContent())) {
- // weixin-pay-java 存在 BUG,无法直接设置内容,所以创建临时文件来解决
- payConfig.setPrivateCertPath(FileUtils.createTempFile(config.getPrivateCertContent()).getPath());
- }
- // 真实客户端
- this.client = new WxPayServiceImpl();
- client.setConfig(payConfig);
- }
-
- @Override
- public PayOrderUnifiedRespDTO doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) {
- throw new UnsupportedOperationException();
-// // 这里原生的返回的是支付的 url 所以直接使用string接收
-// // "invokeResponse": "weixin://wxpay/bizpayurl?pr=EGYAem7zz"
-// String responseV3;
-// try {
-// switch (config.getApiVersion()) {
-// case WXPayClientConfig.API_VERSION_V2:
-// responseV3 = unifiedOrderV2(reqDTO).getCodeUrl();
-// break;
-// case WXPayClientConfig.API_VERSION_V3:
-// responseV3 = this.unifiedOrderV3(reqDTO);
-// break;
-// default:
-// throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
-// }
-// } catch (WxPayException e) {
-// log.error("[unifiedOrder][request({}) 发起支付失败,原因({})]", toJsonString(reqDTO), e);
-// return PayCommonResult.build(ObjectUtils.defaultIfNull(e.getErrCode(), e.getReturnCode(), "CustomErrorCode"),
-// ObjectUtils.defaultIfNull(e.getErrCodeDes(), e.getCustomErrorMsg()), null, codeMapping);
-// }
-// return PayCommonResult.build(CODE_SUCCESS, MESSAGE_SUCCESS, responseV3, codeMapping);
- }
-
- private WxPayNativeOrderResult unifiedOrderV2(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {
- //前端
- String tradeType = reqDTO.getChannelExtras().get("trade_type");
- // 构建 WxPayUnifiedOrderRequest 对象
- WxPayUnifiedOrderRequest request = WxPayUnifiedOrderRequest
- .newBuilder()
- .outTradeNo(reqDTO.getMerchantOrderId())
- .body(reqDTO.getBody())
- .totalFee(reqDTO.getAmount().intValue()) // 单位分
- .timeExpire(DateUtil.format(Date.from(reqDTO.getExpireTime().atZone(ZoneId.systemDefault()).toInstant()), "yyyy-MM-dd'T'HH:mm:ssXXX"))
- .spbillCreateIp(reqDTO.getUserIp())
- .notifyUrl(reqDTO.getNotifyUrl())
- .productId(tradeType)
- .build();
- // 执行请求
- return client.createOrder(request);
- }
-
- private String unifiedOrderV3(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {
- // 构建 WxPayUnifiedOrderRequest 对象
- WxPayUnifiedOrderV3Request request = new WxPayUnifiedOrderV3Request();
- request.setOutTradeNo(reqDTO.getMerchantOrderId());
- request.setDescription(reqDTO.getBody());
- request.setAmount(new WxPayUnifiedOrderV3Request.Amount().setTotal(reqDTO.getAmount().intValue())); // 单位分
- request.setSceneInfo(new WxPayUnifiedOrderV3Request.SceneInfo().setPayerClientIp(reqDTO.getUserIp()));
- request.setNotifyUrl(reqDTO.getNotifyUrl());
- // 执行请求
- return client.createOrderV3(TradeTypeEnum.NATIVE, request);
- }
-
- /**
- *
- * 微信支付回调 分v2 和v3 的处理方式
- *
- * @param data 通知结果
- * @return 支付回调对象
- * @throws WxPayException 微信异常类
- */
-// @Override
- public PayOrderNotifyRespDTO parseOrderNotify(PayNotifyReqDTO data) throws WxPayException {
- log.info("微信支付回调data数据:{}", data.getBody());
- // 微信支付 v2 回调结果处理
- switch (config.getApiVersion()) {
- case WXPayClientConfig.API_VERSION_V2:
- return parseOrderNotifyV2(data);
- case WXPayClientConfig.API_VERSION_V3:
- return parseOrderNotifyV3(data);
- default:
- throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
- }
- }
-
- private PayOrderNotifyRespDTO parseOrderNotifyV3(PayNotifyReqDTO data) throws WxPayException {
- WxPayOrderNotifyV3Result wxPayOrderNotifyV3Result = client.parseOrderNotifyV3Result(data.getBody(), null);
- WxPayOrderNotifyV3Result.DecryptNotifyResult result = wxPayOrderNotifyV3Result.getResult();
- // 转换结果
- Assert.isTrue(Objects.equals(wxPayOrderNotifyV3Result.getResult().getTradeState(), "SUCCESS"),
- "支付结果非 SUCCESS");
- return PayOrderNotifyRespDTO
- .builder()
- .orderExtensionNo(result.getOutTradeNo())
- .channelOrderNo(result.getTradeState())
- .successTime(LocalDateTimeUtil.parse(result.getSuccessTime(), "yyyy-MM-dd'T'HH:mm:ssXXX"))
- .build();
- }
-
- private PayOrderNotifyRespDTO parseOrderNotifyV2(PayNotifyReqDTO data) throws WxPayException {
- WxPayOrderNotifyResult notifyResult = client.parseOrderNotifyResult(data.getBody());
- Assert.isTrue(Objects.equals(notifyResult.getResultCode(), "SUCCESS"), "支付结果非 SUCCESS");
- // 转换结果
- return PayOrderNotifyRespDTO
- .builder()
- .orderExtensionNo(notifyResult.getOutTradeNo())
- .channelOrderNo(notifyResult.getTransactionId())
- .channelUserId(notifyResult.getOpenid())
- .successTime(LocalDateTimeUtil.parse(notifyResult.getTimeEnd(), "yyyyMMddHHmmss"))
- .build();
-
- }
-
- @Override
- protected PayRefundUnifiedRespDTO doUnifiedRefund(PayRefundUnifiedReqDTO reqDTO) {
- // TODO 需要实现
- throw new UnsupportedOperationException();
- }
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/wx/WXPayClientConfig.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/wx/WXPayClientConfig.java
deleted file mode 100644
index 66845bd..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/wx/WXPayClientConfig.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.client.impl.wx;
-
-import cn.hutool.core.io.IoUtil;
-import co.yixiang.yshop.framework.pay.core.client.PayClientConfig;
-import lombok.Data;
-
-import javax.validation.ConstraintViolation;
-import javax.validation.Validator;
-import javax.validation.constraints.NotBlank;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.util.Set;
-
-/**
- * 微信支付的 PayClientConfig 实现类
- * 属性主要来自 {@link com.github.binarywang.wxpay.config.WxPayConfig} 的必要属性
- *
- * @author yshop
- */
-@Data
-public class WXPayClientConfig implements PayClientConfig {
-
- /**
- * API 版本 - V2
- * https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_1
- */
- public static final String API_VERSION_V2 = "v2";
- /**
- * API 版本 - V3
- * https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay-1.shtml
- */
- public static final String API_VERSION_V3 = "v3";
-
- /**
- * 公众号或者小程序的 appid
- */
- @NotBlank(message = "APPID 不能为空", groups = {V2.class, V3.class})
- private String appId;
- /**
- * 商户号
- */
- @NotBlank(message = "商户号 不能为空", groups = {V2.class, V3.class})
- private String mchId;
- /**
- * API 版本
- */
- @NotBlank(message = "API 版本 不能为空", groups = {V2.class, V3.class})
- private String apiVersion;
-
- // ========== V2 版本的参数 ==========
-
- /**
- * 商户密钥
- */
- @NotBlank(message = "商户密钥 不能为空", groups = V2.class)
- private String mchKey;
- /**
- * apiclient_cert.p12 证书文件的绝对路径或者以 classpath: 开头的类路径.
- * 对应的字符串
- *
- * 注意,可通过 {@link #main(String[])} 读取
- */
- /// private String keyContent;
-
- // ========== V3 版本的参数 ==========
- /**
- * apiclient_key.pem 证书文件的绝对路径或者以 classpath: 开头的类路径.
- * 对应的字符串
- * 注意,可通过 {@link #main(String[])} 读取
- */
- @NotBlank(message = "apiclient_key 不能为空", groups = V3.class)
- private String privateKeyContent;
- /**
- * apiclient_cert.pem 证书文件的绝对路径或者以 classpath: 开头的类路径.
- * 对应的字符串
- *
- * 注意,可通过 {@link #main(String[])} 读取
- */
- @NotBlank(message = "apiclient_cert 不能为空", groups = V3.class)
- private String privateCertContent;
- /**
- * apiV3 密钥值
- */
- @NotBlank(message = "apiV3 密钥值 不能为空", groups = V3.class)
- private String apiV3Key;
-
- /**
- * 分组校验 v2版本
- */
- public interface V2 {
- }
-
- /**
- * 分组校验 v3版本
- */
- public interface V3 {
- }
-
- @Override
- public Set> verifyParam(Validator validator) {
- return validator.validate(this, this.getApiVersion().equals(API_VERSION_V2) ? V2.class : V3.class);
- }
-
- public static void main(String[] args) throws FileNotFoundException {
- String path = "/Users/yunai/Downloads/wx_pay/apiclient_cert.p12";
- /// String path = "/Users/yunai/Downloads/wx_pay/apiclient_key.pem";
- /// String path = "/Users/yunai/Downloads/wx_pay/apiclient_cert.pem";
- System.out.println(IoUtil.readUtf8(new FileInputStream(path)));
- }
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/wx/WXPubPayClient.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/wx/WXPubPayClient.java
deleted file mode 100644
index a4b9501..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/client/impl/wx/WXPubPayClient.java
+++ /dev/null
@@ -1,196 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.client.impl.wx;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.date.LocalDateTimeUtil;
-import cn.hutool.core.date.TemporalAccessorUtil;
-import cn.hutool.core.lang.Assert;
-import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.util.StrUtil;
-import co.yixiang.yshop.framework.common.util.io.FileUtils;
-import co.yixiang.yshop.framework.pay.core.client.dto.notify.PayNotifyReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.notify.PayOrderNotifyRespDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedRespDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.refund.PayRefundUnifiedReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.refund.PayRefundUnifiedRespDTO;
-import co.yixiang.yshop.framework.pay.core.client.impl.AbstractPayClient;
-import co.yixiang.yshop.framework.pay.core.enums.PayChannelEnum;
-import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
-import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyV3Result;
-import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
-import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
-import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
-import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result;
-import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
-import com.github.binarywang.wxpay.config.WxPayConfig;
-import com.github.binarywang.wxpay.constant.WxPayConstants;
-import com.github.binarywang.wxpay.exception.WxPayException;
-import com.github.binarywang.wxpay.service.WxPayService;
-import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
-import lombok.extern.slf4j.Slf4j;
-
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.util.Objects;
-
-/**
- * 微信支付(公众号)的 PayClient 实现类
- *
- * @author yshop
- */
-@Slf4j
-public class WXPubPayClient extends AbstractPayClient {
-
- private WxPayService client;
-
- public WXPubPayClient(Long channelId, WXPayClientConfig config) {
- super(channelId, PayChannelEnum.WX_PUB.getCode(), config);
- }
-
- @Override
- protected void doInit() {
- WxPayConfig payConfig = new WxPayConfig();
- BeanUtil.copyProperties(config, payConfig, "keyContent");
- payConfig.setTradeType(WxPayConstants.TradeType.JSAPI); // 设置使用 JS API 支付方式
-// if (StrUtil.isNotEmpty(config.getKeyContent())) {
-// payConfig.setKeyContent(config.getKeyContent().getBytes(StandardCharsets.UTF_8));
-// }
- if (StrUtil.isNotEmpty(config.getPrivateKeyContent())) {
- // weixin-pay-java 存在 BUG,无法直接设置内容,所以创建临时文件来解决
- payConfig.setPrivateKeyPath(FileUtils.createTempFile(config.getPrivateKeyContent()).getPath());
- }
- if (StrUtil.isNotEmpty(config.getPrivateCertContent())) {
- // weixin-pay-java 存在 BUG,无法直接设置内容,所以创建临时文件来解决
- payConfig.setPrivateCertPath(FileUtils.createTempFile(config.getPrivateCertContent()).getPath());
- }
- // 真实客户端
- this.client = new WxPayServiceImpl();
- client.setConfig(payConfig);
- }
-
- @Override
- public PayOrderUnifiedRespDTO doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) {
- throw new UnsupportedOperationException();
-//
-// WxPayMpOrderResult response;
-// try {
-// switch (config.getApiVersion()) {
-// case WXPayClientConfig.API_VERSION_V2:
-// response = this.unifiedOrderV2(reqDTO);
-// break;
-// case WXPayClientConfig.API_VERSION_V3:
-// WxPayUnifiedOrderV3Result.JsapiResult responseV3 = this.unifiedOrderV3(reqDTO);
-// // 将 V3 的结果,统一转换成 V2。返回的字段是一致的
-// response = new WxPayMpOrderResult();
-// BeanUtil.copyProperties(responseV3, response, true);
-// break;
-// default:
-// throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
-// }
-// } catch (WxPayException e) {
-// log.error("[unifiedOrder][request({}) 发起支付失败,原因({})]", toJsonString(reqDTO), e);
-// return PayCommonResult.build(ObjectUtils.defaultIfNull(e.getErrCode(), e.getReturnCode(), "CustomErrorCode"),
-// ObjectUtils.defaultIfNull(e.getErrCodeDes(), e.getCustomErrorMsg()),null, codeMapping);
-// }
-// return PayCommonResult.build(CODE_SUCCESS, MESSAGE_SUCCESS, response, codeMapping);
- }
-
-
- private WxPayMpOrderResult unifiedOrderV2(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {
- // 构建 WxPayUnifiedOrderRequest 对象
- WxPayUnifiedOrderRequest request = WxPayUnifiedOrderRequest.newBuilder()
- .outTradeNo(reqDTO.getMerchantOrderId())
- .body(reqDTO.getBody())
- .totalFee(reqDTO.getAmount()) // 单位分
- .timeExpire(formatDate(reqDTO.getExpireTime()))
- .spbillCreateIp(reqDTO.getUserIp())
- .openid(getOpenid(reqDTO))
- .notifyUrl(reqDTO.getNotifyUrl())
- .build();
- // 执行请求
- return client.createOrder(request);
- }
-
- private WxPayUnifiedOrderV3Result.JsapiResult unifiedOrderV3(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {
- // 构建 WxPayUnifiedOrderRequest 对象
- WxPayUnifiedOrderV3Request request = new WxPayUnifiedOrderV3Request();
- request.setOutTradeNo(reqDTO.getMerchantOrderId());
- request.setDescription(reqDTO.getBody());
- request.setAmount(new WxPayUnifiedOrderV3Request.Amount().setTotal(reqDTO.getAmount())); // 单位分
- request.setTimeExpire(formatDate(reqDTO.getExpireTime()));
- request.setPayer(new WxPayUnifiedOrderV3Request.Payer().setOpenid(getOpenid(reqDTO)));
- request.setSceneInfo(new WxPayUnifiedOrderV3Request.SceneInfo().setPayerClientIp(reqDTO.getUserIp()));
- request.setNotifyUrl(reqDTO.getNotifyUrl());
- // 执行请求
- return client.createOrderV3(TradeTypeEnum.JSAPI, request);
- }
-
- private static String getOpenid(PayOrderUnifiedReqDTO reqDTO) {
- String openid = MapUtil.getStr(reqDTO.getChannelExtras(), "openid");
- if (StrUtil.isEmpty(openid)) {
- throw new IllegalArgumentException("支付请求的 openid 不能为空!");
- }
- return openid;
- }
-
- /**
- *
- * 微信支付回调 分v2 和v3 的处理方式
- *
- * @param data 通知结果
- * @return 支付回调对象
- * @throws WxPayException 微信异常类
- */
-// @Override
- public PayOrderNotifyRespDTO parseOrderNotify(PayNotifyReqDTO data) throws WxPayException {
- log.info("[parseOrderNotify][微信支付回调data数据: {}]", data.getBody());
- // 微信支付 v2 回调结果处理
- switch (config.getApiVersion()) {
- case WXPayClientConfig.API_VERSION_V2:
- return parseOrderNotifyV2(data);
- case WXPayClientConfig.API_VERSION_V3:
- return parseOrderNotifyV3(data);
- default:
- throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
- }
- }
-
- private PayOrderNotifyRespDTO parseOrderNotifyV3(PayNotifyReqDTO data) throws WxPayException {
- WxPayOrderNotifyV3Result wxPayOrderNotifyV3Result = client.parseOrderNotifyV3Result(data.getBody(), null);
- WxPayOrderNotifyV3Result.DecryptNotifyResult result = wxPayOrderNotifyV3Result.getResult();
- // 转换结果
- Assert.isTrue(Objects.equals(wxPayOrderNotifyV3Result.getResult().getTradeState(), "SUCCESS"),
- "支付结果非 SUCCESS");
- return PayOrderNotifyRespDTO
- .builder()
- .orderExtensionNo(result.getOutTradeNo())
- .channelOrderNo(result.getTradeState())
- .successTime(LocalDateTimeUtil.parse(result.getSuccessTime(), "yyyy-MM-dd'T'HH:mm:ssXXX"))
- .build();
- }
-
- private PayOrderNotifyRespDTO parseOrderNotifyV2(PayNotifyReqDTO data) throws WxPayException {
- WxPayOrderNotifyResult notifyResult = client.parseOrderNotifyResult(data.getBody());
- Assert.isTrue(Objects.equals(notifyResult.getResultCode(), "SUCCESS"), "支付结果非 SUCCESS");
- // 转换结果
- return PayOrderNotifyRespDTO
- .builder()
- .orderExtensionNo(notifyResult.getOutTradeNo())
- .channelOrderNo(notifyResult.getTransactionId())
- .channelUserId(notifyResult.getOpenid())
- .successTime(LocalDateTimeUtil.parse(notifyResult.getTimeEnd(), "yyyyMMddHHmmss"))
- .build();
-
- }
-
- @Override
- protected PayRefundUnifiedRespDTO doUnifiedRefund(PayRefundUnifiedReqDTO reqDTO) throws Throwable {
- // TODO 需要实现
- throw new UnsupportedOperationException();
- }
-
- private static String formatDate(LocalDateTime time) {
- return TemporalAccessorUtil.format(time.atZone(ZoneId.systemDefault()), "yyyy-MM-dd'T'HH:mm:ssXXX");
- }
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayChannelEnum.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayChannelEnum.java
deleted file mode 100644
index f4c70b3..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayChannelEnum.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.enums;
-
-import cn.hutool.core.util.ArrayUtil;
-import co.yixiang.yshop.framework.pay.core.client.PayClientConfig;
-import co.yixiang.yshop.framework.pay.core.client.impl.alipay.AlipayPayClientConfig;
-import co.yixiang.yshop.framework.pay.core.client.impl.wx.WXPayClientConfig;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 支付渠道的编码的枚举
- * 枚举值
- *
- * @author yshop
- */
-@Getter
-@AllArgsConstructor
-public enum PayChannelEnum {
-
- WX_PUB("wx_pub", "微信 JSAPI 支付", WXPayClientConfig.class), // 公众号网页
- WX_LITE("wx_lite", "微信小程序支付", WXPayClientConfig.class),
- WX_APP("wx_app", "微信 App 支付", WXPayClientConfig.class),
- WX_NATIVE("wx_native", "微信 native 支付", WXPayClientConfig.class),
-
- ALIPAY_PC("alipay_pc", "支付宝 PC 网站支付", AlipayPayClientConfig.class),
- ALIPAY_WAP("alipay_wap", "支付宝 Wap 网站支付", AlipayPayClientConfig.class),
- ALIPAY_APP("alipay_app", "支付宝App 支付", AlipayPayClientConfig.class),
- ALIPAY_QR("alipay_qr", "支付宝扫码支付", AlipayPayClientConfig.class),
- ALIPAY_BAR("alipay_bar", "支付宝条码支付", AlipayPayClientConfig.class);
-
- /**
- * 编码
- *
- * 参考 https://www.pingxx.com/api/支付渠道属性值.html
- */
- private final String code;
- /**
- * 名字
- */
- private final String name;
-
- /**
- * 配置类
- */
- private final Class extends PayClientConfig> configClass;
-
- /**
- * 微信支付
- */
- public static final String WECHAT = "WECHAT";
-
- /**
- * 支付宝支付
- */
- public static final String ALIPAY = "ALIPAY";
-
- public static PayChannelEnum getByCode(String code) {
- return ArrayUtil.firstMatch(o -> o.getCode().equals(code), values());
- }
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayChannelRefundRespEnum.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayChannelRefundRespEnum.java
deleted file mode 100644
index 740a24e..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayChannelRefundRespEnum.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 渠道统一的退款返回结果
- *
- * @author jason
- */
-@Getter
-@AllArgsConstructor
-public enum PayChannelRefundRespEnum {
-
- SUCCESS(1, "退款成功"),
- FAILURE(2, "退款失败"),
- PROCESSING(3,"退款处理中"),
- CLOSED(4, "退款关闭");
-
- private final Integer status;
- private final String name;
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayDisplayModeEnum.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayDisplayModeEnum.java
deleted file mode 100644
index 1a9ac5b..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayDisplayModeEnum.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.enums;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * 支付 UI 展示模式
- *
- * @author yshop
- */
-@Getter
-@AllArgsConstructor
-public enum PayDisplayModeEnum {
-
- URL("url"), // Redirect 跳转链接的方式
- IFRAME("iframe"), // IFrame 内嵌链接的方式
- FORM("form"), // HTML 表单提交
- QR_CODE("qr_code"), // 二维码的文字内容
- QR_CODE_URL("qr_code_url"), // 二维码的图片链接
- BAR_CODE("bar_code"), // 条形码
- APP("app"), // 应用
- ;
-
- /**
- * 展示模式
- */
- private final String mode;
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayFrameworkErrorCodeConstants.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayFrameworkErrorCodeConstants.java
deleted file mode 100644
index 6b77c23..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayFrameworkErrorCodeConstants.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.enums;
-
-import co.yixiang.yshop.framework.common.exception.ErrorCode;
-
-/**
- * 支付框架的错误码枚举
- *
- * 支付框架,使用 2-002-000-000 段
- *
- * @author yshop
- */
-public interface PayFrameworkErrorCodeConstants {
-
- ErrorCode PAY_UNKNOWN = new ErrorCode(2002000000, "未知错误,需要解析");
-
- // ========== 配置相关相关 2002000100 ==========
- // todo yshop:如下的错误码,怎么处理掉
- ErrorCode PAY_CONFIG_APP_ID_ERROR = new ErrorCode(2002000100, "支付渠道 AppId 不正确");
- ErrorCode PAY_CONFIG_SIGN_ERROR = new ErrorCode(2002000100, "签名错误"); // 例如说,微信支付,配置错了 mchId 或者 mchKey
-
-
- // ========== 其它相关 2002000900 开头 ==========
- // todo yshop:如下的错误码,怎么处理掉
- ErrorCode PAY_OPENID_ERROR = new ErrorCode(2002000900, "无效的 openid"); // 例如说,微信 openid 未授权过
- ErrorCode PAY_PARAM_MISSING = new ErrorCode(2002000901, "请求参数缺失"); // 例如说,支付少传了金额
-
- ErrorCode PAY_EXCEPTION = new ErrorCode(2002000999, "调用异常");
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayNotifyRefundStatusEnum.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayNotifyRefundStatusEnum.java
deleted file mode 100644
index 04b788e..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/java/co/yixiang/yshop/framework/pay/core/enums/PayNotifyRefundStatusEnum.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.enums;
-
-/**
- * 退款通知, 统一的渠道退款状态
- *
- * @author jason
- */
-public enum PayNotifyRefundStatusEnum {
-
- /**
- * 支付宝 中 全额退款 trade_status=TRADE_CLOSED, 部分退款 trade_status=TRADE_SUCCESS
- * 退款成功
- */
- SUCCESS,
-
- /**
- * 支付宝退款通知没有这个状态
- * 退款异常
- */
- ABNORMAL;
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
deleted file mode 100644
index 47e8cc5..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ /dev/null
@@ -1 +0,0 @@
-co.yixiang.yshop.framework.pay.config.YshopPayAutoConfiguration
\ No newline at end of file
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/test/java/cn.iocoder.yshop.framework.pay.core.client.impl/PayClientFactoryImplIntegrationTest.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/test/java/cn.iocoder.yshop.framework.pay.core.client.impl/PayClientFactoryImplIntegrationTest.java
deleted file mode 100644
index 62319d2..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/test/java/cn.iocoder.yshop.framework.pay.core.client.impl/PayClientFactoryImplIntegrationTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.client.impl;
-
-import cn.hutool.core.io.IoUtil;
-import cn.hutool.core.util.RandomUtil;
-import co.yixiang.yshop.framework.common.pojo.CommonResult;
-import co.yixiang.yshop.framework.common.util.json.JsonUtils;
-import co.yixiang.yshop.framework.pay.core.client.PayClient;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.impl.alipay.AlipayPayClientConfig;
-import co.yixiang.yshop.framework.pay.core.client.impl.alipay.AlipayQrPayClient;
-import co.yixiang.yshop.framework.pay.core.client.impl.alipay.AlipayWapPayClient;
-import co.yixiang.yshop.framework.pay.core.client.impl.wx.WXPayClientConfig;
-import co.yixiang.yshop.framework.pay.core.client.impl.wx.WXPubPayClient;
-import co.yixiang.yshop.framework.pay.core.enums.PayChannelEnum;
-import com.alipay.api.response.AlipayTradePrecreateResponse;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-
-/**
- * {@link PayClientFactoryImpl} 的集成测试
- *
- * @author yshop
- */
-@Disabled
-public class PayClientFactoryImplIntegrationTest {
-
- private final PayClientFactoryImpl payClientFactory = new PayClientFactoryImpl();
-
- /**
- * {@link WXPubPayClient} 的 V2 版本
- */
- @Test
- public void testCreatePayClient_WX_PUB_V2() {
- // 创建配置
- WXPayClientConfig config = new WXPayClientConfig();
- config.setAppId("wx041349c6f39b268b");
- config.setMchId("1545083881");
- config.setApiVersion(WXPayClientConfig.API_VERSION_V2);
- config.setMchKey("0alL64UDQdlCwiKZ73ib7ypaIjMns06p");
- // 创建客户端
- Long channelId = RandomUtil.randomLong();
- payClientFactory.createOrUpdatePayClient(channelId, PayChannelEnum.WX_PUB.getCode(), config);
- PayClient client = payClientFactory.getPayClient(channelId);
- // 发起支付
- PayOrderUnifiedReqDTO reqDTO = buildPayOrderUnifiedReqDTO();
-// CommonResult> result = client.unifiedOrder(reqDTO);
-// System.out.println(result);
- }
-
- /**
- * {@link WXPubPayClient} 的 V3 版本
- */
- @Test
- public void testCreatePayClient_WX_PUB_V3() throws FileNotFoundException {
- // 创建配置
- WXPayClientConfig config = new WXPayClientConfig();
- config.setAppId("wx041349c6f39b268b");
- config.setMchId("1545083881");
- config.setApiVersion(WXPayClientConfig.API_VERSION_V3);
- config.setPrivateKeyContent(IoUtil.readUtf8(new FileInputStream("/Users/yunai/Downloads/wx_pay/apiclient_key.pem")));
- config.setPrivateCertContent(IoUtil.readUtf8(new FileInputStream("/Users/yunai/Downloads/wx_pay/apiclient_cert.pem")));
- config.setApiV3Key("joerVi8y5DJ3o4ttA0o1uH47Xz1u2Ase");
- // 创建客户端
- Long channelId = RandomUtil.randomLong();
- payClientFactory.createOrUpdatePayClient(channelId, PayChannelEnum.WX_PUB.getCode(), config);
- PayClient client = payClientFactory.getPayClient(channelId);
- // 发起支付
- PayOrderUnifiedReqDTO reqDTO = buildPayOrderUnifiedReqDTO();
-// CommonResult> result = client.unifiedOrder(reqDTO);
-// System.out.println(result);
- }
-
- /**
- * {@link AlipayQrPayClient}
- */
- @Test
- @SuppressWarnings("unchecked")
- public void testCreatePayClient_ALIPAY_QR() {
- // 创建配置
- AlipayPayClientConfig config = new AlipayPayClientConfig();
- config.setAppId("2021000118634035");
- config.setServerUrl(AlipayPayClientConfig.SERVER_URL_SANDBOX);
- config.setSignType(AlipayPayClientConfig.SIGN_TYPE_DEFAULT);
- config.setPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHsEV1cDupwJv890x84qbppUtRIfhaKSwSVN0thCcsDCaAsGR5MZslDkO8NCT9V4r2SVXjyY7eJUZlZd1M0C8T01Tg4UOx5LUbic0O3A1uJMy6V1n9IyYwbAW3AEZhBd5bSbPgrqvmv3NeWSTQT6Anxnllf+2iDH6zyA2fPl7cYyQtbZoDJQFGqr4F+cGh2R6akzRKNoBkAeMYwoY6es2lX8sJxCVPWUmxNUoL3tScwlSpd7Bxw0q9c/X01jMwuQ0+Va358zgFiGERTE6yD01eu40OBDXOYO3z++y+TAYHlQQ2toMO63trepo88X3xV3R44/1DH+k2pAm2IF5ixiLrAgMBAAECggEAPx3SoXcseaD7rmcGcE0p4SMfbsUDdkUSmBBbtfF0GzwnqNLkWa+mgE0rWt9SmXngTQH97vByAYmLPl1s3G82ht1V7Sk7yQMe74lhFllr8eEyTjeVx3dTK1EEM4TwN+936DTXdFsr4TELJEcJJdD0KaxcCcfBLRDs2wnitEFZ9N+GoZybVmY8w0e0MI7PLObUZ2l0X4RurQnfG9ZxjXjC7PkeMVv7cGGylpNFi3BbvkRhdhLPDC2E6wqnr9e7zk+hiENivAezXrtxtwKovzCtnWJ1r0IO14Rh47H509Ic0wFnj+o5YyUL4LdmpL7yaaH6fM7zcSLFjNZPHvZCKPwYcQKBgQDQFho98QvnL8ex4v6cry4VitGpjSXm1qP3vmMQk4rTsn8iPWtcxPjqGEqOQJjdi4Mi0VZKQOLFwlH0kl95wNrD/isJ4O1yeYfX7YAXApzHqYNINzM79HemO3Yx1qLMW3okRFJ9pPRzbQ9qkTpsaegsmyX316zOBhzGRYjKbutTYwKBgQCm7phr9XdFW5Vh+XR90mVs483nrLmMiDKg7YKxSLJ8amiDjzPejCn7i95Hah08P+2MIZLIPbh2VLacczR6ltRRzN5bg5etFuqSgfkuHyxpoDmpjbe08+Q2h8JBYqcC5Nhv1AKU4iOUhVLHo/FBAQliMcGc/J3eiYTFC7EsNx382QKBgClb20doe7cttgFTXswBvaUmfFm45kmla924B7SpvrQpDD/f+VDtDZRp05fGmxuduSjYdtA3aVtpLiTwWu22OUUvZZqHDGruYOO4Hvdz23mL5b4ayqImCwoNU4bAZIc9v18p/UNf3/55NNE3oGcf/bev9rH2OjCQ4nM+Ktwhg8CFAoGACSgvbkShzUkv0ZcIf9ppu+ZnJh1AdGgINvGwaJ8vQ0nm/8h8NOoFZ4oNoGc+wU5Ubops7dUM6FjPR5e+OjdJ4E7Xp7d5O4J1TaIZlCEbo5OpdhaTDDcQvrkFu+Z4eN0qzj+YAKjDAOOrXc4tbr5q0FsgXscwtcNfaBuzFVTUrUkCgYEAwzPnMNhWG3zOWLUs2QFA2GP4Y+J8cpUYfj6pbKKzeLwyG9qBwF1NJpN8m+q9q7V9P2LY+9Lp9e1mGsGeqt5HMEA3P6vIpcqLJLqE/4PBLLRzfccTcmqb1m71+erxTRhHBRkGS+I7dZEb3olQfnS1Y1tpMBxiwYwR3LW4oXuJwj8=");
- config.setAlipayPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnq90KnF4dTnlzzmxpujbI05OYqi5WxAS6cL0gnZFv2gK51HExF8v/BaP7P979PhFMgWTqmOOI+Dtno5s+yD09XTY1WkshbLk6i4g2Xlr8fyW9ODnkU88RI2w9UdPhQU4cPPwBNlrsYhKkVK2OxwM3kFqjoBBY0CZoZCsSQ3LDH5WeZqPArlsS6xa2zqJBuuoKjMrdpELl3eXSjP8K54eDJCbeetCZNKWLL3DPahTPB7LZikfYmslb0QUvCgGapD0xkS7eVq70NaL1G57MWABs4tbfWgxike4Daj3EfUrzIVspQxj7w8HEj9WozJPgL88kSJSits0pqD3n5r8HSuseQIDAQAB");
- // 创建客户端
- Long channelId = RandomUtil.randomLong();
- payClientFactory.createOrUpdatePayClient(channelId, PayChannelEnum.ALIPAY_QR.getCode(), config);
- PayClient client = payClientFactory.getPayClient(channelId);
- // 发起支付
- PayOrderUnifiedReqDTO reqDTO = buildPayOrderUnifiedReqDTO();
- reqDTO.setNotifyUrl("http://yunai.natapp1.cc/admin-api/pay/notify/callback/18"); // TODO @tina: 这里改成你的 natapp 回调地址
-// CommonResult result = (CommonResult) client.unifiedOrder(reqDTO);
-// System.out.println(JsonUtils.toJsonString(result));
-// System.out.println(result.getData().getQrCode());
- }
-
- /**
- * {@link AlipayWapPayClient}
- */
- @Test
- public void testCreatePayClient_ALIPAY_WAP() {
- // 创建配置
- AlipayPayClientConfig config = new AlipayPayClientConfig();
- config.setAppId("2021000118634035");
- config.setServerUrl(AlipayPayClientConfig.SERVER_URL_SANDBOX);
- config.setSignType(AlipayPayClientConfig.SIGN_TYPE_DEFAULT);
- config.setPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHsEV1cDupwJv890x84qbppUtRIfhaKSwSVN0thCcsDCaAsGR5MZslDkO8NCT9V4r2SVXjyY7eJUZlZd1M0C8T01Tg4UOx5LUbic0O3A1uJMy6V1n9IyYwbAW3AEZhBd5bSbPgrqvmv3NeWSTQT6Anxnllf+2iDH6zyA2fPl7cYyQtbZoDJQFGqr4F+cGh2R6akzRKNoBkAeMYwoY6es2lX8sJxCVPWUmxNUoL3tScwlSpd7Bxw0q9c/X01jMwuQ0+Va358zgFiGERTE6yD01eu40OBDXOYO3z++y+TAYHlQQ2toMO63trepo88X3xV3R44/1DH+k2pAm2IF5ixiLrAgMBAAECggEAPx3SoXcseaD7rmcGcE0p4SMfbsUDdkUSmBBbtfF0GzwnqNLkWa+mgE0rWt9SmXngTQH97vByAYmLPl1s3G82ht1V7Sk7yQMe74lhFllr8eEyTjeVx3dTK1EEM4TwN+936DTXdFsr4TELJEcJJdD0KaxcCcfBLRDs2wnitEFZ9N+GoZybVmY8w0e0MI7PLObUZ2l0X4RurQnfG9ZxjXjC7PkeMVv7cGGylpNFi3BbvkRhdhLPDC2E6wqnr9e7zk+hiENivAezXrtxtwKovzCtnWJ1r0IO14Rh47H509Ic0wFnj+o5YyUL4LdmpL7yaaH6fM7zcSLFjNZPHvZCKPwYcQKBgQDQFho98QvnL8ex4v6cry4VitGpjSXm1qP3vmMQk4rTsn8iPWtcxPjqGEqOQJjdi4Mi0VZKQOLFwlH0kl95wNrD/isJ4O1yeYfX7YAXApzHqYNINzM79HemO3Yx1qLMW3okRFJ9pPRzbQ9qkTpsaegsmyX316zOBhzGRYjKbutTYwKBgQCm7phr9XdFW5Vh+XR90mVs483nrLmMiDKg7YKxSLJ8amiDjzPejCn7i95Hah08P+2MIZLIPbh2VLacczR6ltRRzN5bg5etFuqSgfkuHyxpoDmpjbe08+Q2h8JBYqcC5Nhv1AKU4iOUhVLHo/FBAQliMcGc/J3eiYTFC7EsNx382QKBgClb20doe7cttgFTXswBvaUmfFm45kmla924B7SpvrQpDD/f+VDtDZRp05fGmxuduSjYdtA3aVtpLiTwWu22OUUvZZqHDGruYOO4Hvdz23mL5b4ayqImCwoNU4bAZIc9v18p/UNf3/55NNE3oGcf/bev9rH2OjCQ4nM+Ktwhg8CFAoGACSgvbkShzUkv0ZcIf9ppu+ZnJh1AdGgINvGwaJ8vQ0nm/8h8NOoFZ4oNoGc+wU5Ubops7dUM6FjPR5e+OjdJ4E7Xp7d5O4J1TaIZlCEbo5OpdhaTDDcQvrkFu+Z4eN0qzj+YAKjDAOOrXc4tbr5q0FsgXscwtcNfaBuzFVTUrUkCgYEAwzPnMNhWG3zOWLUs2QFA2GP4Y+J8cpUYfj6pbKKzeLwyG9qBwF1NJpN8m+q9q7V9P2LY+9Lp9e1mGsGeqt5HMEA3P6vIpcqLJLqE/4PBLLRzfccTcmqb1m71+erxTRhHBRkGS+I7dZEb3olQfnS1Y1tpMBxiwYwR3LW4oXuJwj8=");
- config.setAlipayPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnq90KnF4dTnlzzmxpujbI05OYqi5WxAS6cL0gnZFv2gK51HExF8v/BaP7P979PhFMgWTqmOOI+Dtno5s+yD09XTY1WkshbLk6i4g2Xlr8fyW9ODnkU88RI2w9UdPhQU4cPPwBNlrsYhKkVK2OxwM3kFqjoBBY0CZoZCsSQ3LDH5WeZqPArlsS6xa2zqJBuuoKjMrdpELl3eXSjP8K54eDJCbeetCZNKWLL3DPahTPB7LZikfYmslb0QUvCgGapD0xkS7eVq70NaL1G57MWABs4tbfWgxike4Daj3EfUrzIVspQxj7w8HEj9WozJPgL88kSJSits0pqD3n5r8HSuseQIDAQAB");
- // 创建客户端
- Long channelId = RandomUtil.randomLong();
- payClientFactory.createOrUpdatePayClient(channelId, PayChannelEnum.ALIPAY_WAP.getCode(), config);
- PayClient client = payClientFactory.getPayClient(channelId);
- // 发起支付
- PayOrderUnifiedReqDTO reqDTO = buildPayOrderUnifiedReqDTO();
-// CommonResult> result = client.unifiedOrder(reqDTO);
-// System.out.println(JsonUtils.toJsonString(result));
- }
-
- private static PayOrderUnifiedReqDTO buildPayOrderUnifiedReqDTO() {
- PayOrderUnifiedReqDTO reqDTO = new PayOrderUnifiedReqDTO();
- reqDTO.setAmount(123);
- reqDTO.setSubject("IPhone 13");
- reqDTO.setBody("biubiubiu");
- reqDTO.setMerchantOrderId(String.valueOf(System.currentTimeMillis()));
- reqDTO.setUserIp("127.0.0.1");
- reqDTO.setNotifyUrl("http://127.0.0.1:8080");
- return reqDTO;
- }
-
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/test/java/cn.iocoder.yshop.framework.pay.core.client.impl/alipay/AlipayQrPayClientTest.java b/yshop-framework/yshop-spring-boot-starter-biz-pay/src/test/java/cn.iocoder.yshop.framework.pay.core.client.impl/alipay/AlipayQrPayClientTest.java
deleted file mode 100644
index 09769d6..0000000
--- a/yshop-framework/yshop-spring-boot-starter-biz-pay/src/test/java/cn.iocoder.yshop.framework.pay.core.client.impl/alipay/AlipayQrPayClientTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package co.yixiang.yshop.framework.pay.core.client.impl.alipay;
-import cn.hutool.core.util.ReflectUtil;
-import co.yixiang.yshop.framework.common.exception.enums.GlobalErrorCodeConstants;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
-import co.yixiang.yshop.framework.pay.core.client.dto.order.PayOrderUnifiedRespDTO;
-import co.yixiang.yshop.framework.test.core.ut.BaseMockitoUnitTest;
-import com.alipay.api.AlipayApiException;
-import com.alipay.api.DefaultAlipayClient;
-import com.alipay.api.request.AlipayTradePrecreateRequest;
-import com.alipay.api.response.AlipayTradePrecreateResponse;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentMatcher;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-
-import static co.yixiang.yshop.framework.test.core.util.RandomUtils.randomPojo;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotSame;
-import static org.mockito.ArgumentMatchers.argThat;
-import static org.mockito.Mockito.when;
-
-public class AlipayQrPayClientTest extends BaseMockitoUnitTest {
-
- private final AlipayPayClientConfig config = new AlipayPayClientConfig()
- .setAppId("2021000118634035")
- .setServerUrl(AlipayPayClientConfig.SERVER_URL_SANDBOX)
- .setSignType(AlipayPayClientConfig.SIGN_TYPE_DEFAULT)
- // TODO @tina:key 可以随机就好,简洁一点哈。
- .setPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHsEV1cDupwJ" +
- "v890x84qbppUtRIfhaKSwSVN0thCcsDCaAsGR5MZslDkO8NCT9V4r2SVXjyY7eJUZlZd1M0C8T" +
- "01Tg4UOx5LUbic0O3A1uJMy6V1n9IyYwbAW3AEZhBd5bSbPgrqvmv3NeWSTQT6Anxnllf+2iDH" +
- "6zyA2fPl7cYyQtbZoDJQFGqr4F+cGh2R6akzRKNoBkAeMYwoY6es2lX8sJxCVPWUmxNUoL3tScw" +
- "lSpd7Bxw0q9c/X01jMwuQ0+Va358zgFiGERTE6yD01eu40OBDXOYO3z++y+TAYHlQQ2toMO63tr" +
- "epo88X3xV3R44/1DH+k2pAm2IF5ixiLrAgMBAAECggEAPx3SoXcseaD7rmcGcE0p4SMfbsUDdk" +
- "USmBBbtfF0GzwnqNLkWa+mgE0rWt9SmXngTQH97vByAYmLPl1s3G82ht1V7Sk7yQMe74lhFllr" +
- "8eEyTjeVx3dTK1EEM4TwN+936DTXdFsr4TELJEcJJdD0KaxcCcfBLRDs2wnitEFZ9N+GoZybVmY8w" +
- "0e0MI7PLObUZ2l0X4RurQnfG9ZxjXjC7PkeMVv7cGGylpNFi3BbvkRhdhLPDC2E6wqnr9e7zk+hiENi" +
- "vAezXrtxtwKovzCtnWJ1r0IO14Rh47H509Ic0wFnj+o5YyUL4LdmpL7yaaH6fM7zcSLFjNZPHvZCKPw" +
- "YcQKBgQDQFho98QvnL8ex4v6cry4VitGpjSXm1qP3vmMQk4rTsn8iPWtcxPjqGEqOQJjdi4Mi0VZKQO" +
- "LFwlH0kl95wNrD/isJ4O1yeYfX7YAXApzHqYNINzM79HemO3Yx1qLMW3okRFJ9pPRzbQ9qkTpsaegsm" +
- "yX316zOBhzGRYjKbutTYwKBgQCm7phr9XdFW5Vh+XR90mVs483nrLmMiDKg7YKxSLJ8amiDjzPejCn7i9" +
- "5Hah08P+2MIZLIPbh2VLacczR6ltRRzN5bg5etFuqSgfkuHyxpoDmpjbe08+Q2h8JBYqcC5Nhv1AKU4iOU" +
- "hVLHo/FBAQliMcGc/J3eiYTFC7EsNx382QKBgClb20doe7cttgFTXswBvaUmfFm45kmla924B7SpvrQpDD" +
- "/f+VDtDZRp05fGmxuduSjYdtA3aVtpLiTwWu22OUUvZZqHDGruYOO4Hvdz23mL5b4ayqImCwoNU4bAZIc9v1" +
- "8p/UNf3/55NNE3oGcf/bev9rH2OjCQ4nM+Ktwhg8CFAoGACSgvbkShzUkv0ZcIf9ppu+ZnJh1AdGgINvGwaJ" +
- "8vQ0nm/8h8NOoFZ4oNoGc+wU5Ubops7dUM6FjPR5e+OjdJ4E7Xp7d5O4J1TaIZlCEbo5OpdhaTDDcQvrkFu+Z4e" +
- "N0qzj+YAKjDAOOrXc4tbr5q0FsgXscwtcNfaBuzFVTUrUkCgYEAwzPnMNhWG3zOWLUs2QFA2GP4Y+J8cpUYfj6p" +
- "bKKzeLwyG9qBwF1NJpN8m+q9q7V9P2LY+9Lp9e1mGsGeqt5HMEA3P6vIpcqLJLqE/4PBLLRzfccTcmqb1m71+erx" +
- "TRhHBRkGS+I7dZEb3olQfnS1Y1tpMBxiwYwR3LW4oXuJwj8=")
- .setAlipayPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnq90KnF4dTnlzzmxpujbI05OYqi5WxAS6cL0" +
- "gnZFv2gK51HExF8v/BaP7P979PhFMgWTqmOOI+Dtno5s+yD09XTY1WkshbLk6i4g2Xlr8fyW9ODnkU88RI2w9UdPhQU4cPPwBN" +
- "lrsYhKkVK2OxwM3kFqjoBBY0CZoZCsSQ3LDH5WeZqPArlsS6xa2zqJBuuoKjMrdpELl3eXSjP8K54eDJCbeetCZNKWLL3DPahTPB7LZ" +
- "ikfYmslb0QUvCgGapD0xkS7eVq70NaL1G57MWABs4tbfWgxike4Daj3EfUrzIVspQxj7w8HEj9WozJPgL88kSJSits0pqD3n5r8HSuseQIDAQAB");
-
- @InjectMocks
- AlipayQrPayClient client = new AlipayQrPayClient(10L,config);
-
- @Mock
- private DefaultAlipayClient defaultAlipayClient;
-
- @Test
- public void testDoInit(){
- client.doInit();
- assertNotSame(defaultAlipayClient, ReflectUtil.getFieldValue(client, "defaultAlipayClient"));
- }
-
- @Test
- @Disabled // TODO yshop:临时禁用
- public void create() throws AlipayApiException {
- // TODO @tina:参数可以尽量随机一点,使用随机方法。这样的好处是,避免对固定参数的依赖,导致可能仅仅满足固定参数的结果
- // 这里,设置可以直接随机整个对象。
- Long shopOrderId = System.currentTimeMillis();
- PayOrderUnifiedReqDTO reqDTO=new PayOrderUnifiedReqDTO();
- reqDTO.setMerchantOrderId(String.valueOf(System.currentTimeMillis()));
- reqDTO.setAmount(1);
- reqDTO.setBody("内容:" + shopOrderId);
- reqDTO.setSubject("标题:"+shopOrderId);
- String notify="http://niubi.natapp1.cc/api/pay/order/notify";
- reqDTO.setNotifyUrl(notify);
-
- AlipayTradePrecreateResponse response=randomPojo(AlipayTradePrecreateResponse.class,o->o.setQrCode("success"));
-
- when(defaultAlipayClient.execute(argThat((ArgumentMatcher) request ->{
- assertEquals(notify,request.getNotifyUrl());
- return true;
- }))).thenReturn(response);
-
-
-// PayCommonResult result = client.doUnifiedOrder(reqDTO);
-// // 断言
-// assertEquals(response.getCode(), result.getApiCode());
-// assertEquals(response.getMsg(), result.getApiMsg());
-// // TODO @tina:这个断言木有过?
-// assertEquals(GlobalErrorCodeConstants.SUCCESS.getCode(), result.getCode());
-// assertEquals(GlobalErrorCodeConstants.SUCCESS.getMsg(), result.getMsg());
-
- }
-}
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-sms/pom.xml b/yshop-framework/yshop-spring-boot-starter-biz-sms/pom.xml
index 84fa6ff..e93b68c 100644
--- a/yshop-framework/yshop-spring-boot-starter-biz-sms/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-biz-sms/pom.xml
@@ -13,7 +13,7 @@
${project.artifactId}
短信拓展,支持阿里云、腾讯云
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-tenant/pom.xml b/yshop-framework/yshop-spring-boot-starter-biz-tenant/pom.xml
index b9e4082..025b420 100644
--- a/yshop-framework/yshop-spring-boot-starter-biz-tenant/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-biz-tenant/pom.xml
@@ -13,7 +13,7 @@
${project.artifactId}
多租户
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-biz-weixin/pom.xml b/yshop-framework/yshop-spring-boot-starter-biz-weixin/pom.xml
index b9111ef..7940d97 100644
--- a/yshop-framework/yshop-spring-boot-starter-biz-weixin/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-biz-weixin/pom.xml
@@ -16,7 +16,7 @@
1. 基于 weixin-java-mp 库,对接微信公众号平台。目前主要解决微信公众号的支付场景。
2. 基于 weixin-java-miniapp 库,对接微信小程序。目前主要解决微信小程序的一键登录场景。
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-excel/pom.xml b/yshop-framework/yshop-spring-boot-starter-excel/pom.xml
index c08d738..f10086d 100644
--- a/yshop-framework/yshop-spring-boot-starter-excel/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-excel/pom.xml
@@ -13,7 +13,7 @@
${project.artifactId}
Excel 拓展
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-file/pom.xml b/yshop-framework/yshop-spring-boot-starter-file/pom.xml
index 88ea200..30d3dfb 100644
--- a/yshop-framework/yshop-spring-boot-starter-file/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-file/pom.xml
@@ -18,7 +18,7 @@
4. db:数据库
5. s3:支持 S3 协议的云存储服务,例如说 MinIO、阿里云、华为云、腾讯云、七牛云等等
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-file/src/main/java/co/yixiang/yshop/framework/file/core/client/s3/S3FileClientConfig.java b/yshop-framework/yshop-spring-boot-starter-file/src/main/java/co/yixiang/yshop/framework/file/core/client/s3/S3FileClientConfig.java
index b583e83..42a5691 100644
--- a/yshop-framework/yshop-spring-boot-starter-file/src/main/java/co/yixiang/yshop/framework/file/core/client/s3/S3FileClientConfig.java
+++ b/yshop-framework/yshop-spring-boot-starter-file/src/main/java/co/yixiang/yshop/framework/file/core/client/s3/S3FileClientConfig.java
@@ -23,7 +23,7 @@ public class S3FileClientConfig implements FileClientConfig {
/**
* 节点地址
- * 1. MinIO:https://www.iocoder.cn/Spring-Boot/MinIO 。例如说,http://127.0.0.1:9000
+ * 1. MinIO:https://www.yixiang.co/Spring-Boot/MinIO 。例如说,http://127.0.0.1:9000
* 2. 阿里云:https://help.aliyun.com/document_detail/31837.html
* 3. 腾讯云:https://cloud.tencent.com/document/product/436/6224
* 4. 七牛云:https://developer.qiniu.com/kodo/4088/s3-access-domainname
@@ -49,7 +49,7 @@ public class S3FileClientConfig implements FileClientConfig {
/**
* 访问 Key
- * 1. MinIO:https://www.iocoder.cn/Spring-Boot/MinIO
+ * 1. MinIO:https://www.yixiang.co/Spring-Boot/MinIO
* 2. 阿里云:https://ram.console.aliyun.com/manage/ak
* 3. 腾讯云:https://console.cloud.tencent.com/cam/capi
* 4. 七牛云:https://portal.qiniu.com/user/key
diff --git a/yshop-framework/yshop-spring-boot-starter-file/src/test/java/co/yixiang/yshop/framework/file/core/client/local/LocalFileClientTest.java b/yshop-framework/yshop-spring-boot-starter-file/src/test/java/co/yixiang/yshop/framework/file/core/client/local/LocalFileClientTest.java
index fe92857..f3918d1 100644
--- a/yshop-framework/yshop-spring-boot-starter-file/src/test/java/co/yixiang/yshop/framework/file/core/client/local/LocalFileClientTest.java
+++ b/yshop-framework/yshop-spring-boot-starter-file/src/test/java/co/yixiang/yshop/framework/file/core/client/local/LocalFileClientTest.java
@@ -13,7 +13,7 @@ public class LocalFileClientTest {
// 创建客户端
LocalFileClientConfig config = new LocalFileClientConfig();
config.setDomain("http://127.0.0.1:48080");
- config.setBasePath("/Users/yunai/file_test");
+ config.setBasePath("/Users/yshop/file_test");
LocalFileClient client = new LocalFileClient(0L, config);
client.init();
// 上传文件
diff --git a/yshop-framework/yshop-spring-boot-starter-file/src/test/java/co/yixiang/yshop/framework/file/core/client/s3/S3FileClientTest.java b/yshop-framework/yshop-spring-boot-starter-file/src/test/java/co/yixiang/yshop/framework/file/core/client/s3/S3FileClientTest.java
index a264f92..2b57601 100644
--- a/yshop-framework/yshop-spring-boot-starter-file/src/test/java/co/yixiang/yshop/framework/file/core/client/s3/S3FileClientTest.java
+++ b/yshop-framework/yshop-spring-boot-starter-file/src/test/java/co/yixiang/yshop/framework/file/core/client/s3/S3FileClientTest.java
@@ -33,8 +33,8 @@ public class S3FileClientTest {
// 配置成你自己的
config.setAccessKey(System.getenv("ALIYUN_ACCESS_KEY"));
config.setAccessSecret(System.getenv("ALIYUN_SECRET_KEY"));
- config.setBucket("yunai-aoteman");
- config.setDomain(null); // 如果有自定义域名,则可以设置。http://ali-oss.iocoder.cn
+ config.setBucket("yshop-aoteman");
+ config.setDomain(null); // 如果有自定义域名,则可以设置。http://ali-oss.yixiang.co
// 默认北京的 endpoint
config.setEndpoint("oss-cn-beijing.aliyuncs.com");
@@ -50,7 +50,7 @@ public class S3FileClientTest {
config.setAccessKey(System.getenv("QCLOUD_ACCESS_KEY"));
config.setAccessSecret(System.getenv("QCLOUD_SECRET_KEY"));
config.setBucket("aoteman-1255880240");
- config.setDomain(null); // 如果有自定义域名,则可以设置。http://tengxun-oss.iocoder.cn
+ config.setDomain(null); // 如果有自定义域名,则可以设置。http://tengxun-oss.yixiang.co
// 默认上海的 endpoint
config.setEndpoint("cos.ap-shanghai.myqcloud.com");
@@ -67,8 +67,8 @@ public class S3FileClientTest {
// config.setAccessSecret(System.getenv("QINIU_SECRET_KEY"));
config.setAccessKey("b7yvuhBSAGjmtPhMFcn9iMOxUOY_I06cA_p0ZUx8");
config.setAccessSecret("kXM1l5ia1RvSX3QaOEcwI3RLz3Y2rmNszWonKZtP");
- config.setBucket("ruoyi-vue-pro");
- config.setDomain("http://test.yshop.iocoder.cn"); // 如果有自定义域名,则可以设置。http://static.yshop.iocoder.cn
+ config.setBucket("yshop-pro");
+ config.setDomain("http://test.yshop.yixiang.co"); // 如果有自定义域名,则可以设置。http://static.yshop.yixiang.co
// 默认上海的 endpoint
config.setEndpoint("s3-cn-south-1.qiniucs.com");
diff --git a/yshop-framework/yshop-spring-boot-starter-job/pom.xml b/yshop-framework/yshop-spring-boot-starter-job/pom.xml
index aba645e..2bea5ab 100644
--- a/yshop-framework/yshop-spring-boot-starter-job/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-job/pom.xml
@@ -16,7 +16,7 @@
1. 定时任务,基于 Quartz 拓展
2. 异步任务,基于 Spring Async 拓展
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-job/《芋道 Spring Boot 定时任务入门》.md b/yshop-framework/yshop-spring-boot-starter-job/《芋道 Spring Boot 定时任务入门》.md
deleted file mode 100644
index ea824d4..0000000
--- a/yshop-framework/yshop-spring-boot-starter-job/《芋道 Spring Boot 定时任务入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-job/《芋道 Spring Boot 异步任务入门》.md b/yshop-framework/yshop-spring-boot-starter-job/《芋道 Spring Boot 异步任务入门》.md
deleted file mode 100644
index 8fe01f4..0000000
--- a/yshop-framework/yshop-spring-boot-starter-job/《芋道 Spring Boot 异步任务入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-monitor/pom.xml b/yshop-framework/yshop-spring-boot-starter-monitor/pom.xml
index 0593c9c..a76da12 100644
--- a/yshop-framework/yshop-spring-boot-starter-monitor/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-monitor/pom.xml
@@ -13,7 +13,7 @@
${project.artifactId}
服务监控,提供链路追踪、日志服务、指标收集等等功能
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md b/yshop-framework/yshop-spring-boot-starter-monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md
deleted file mode 100644
index 3a64023..0000000
--- a/yshop-framework/yshop-spring-boot-starter-monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-monitor/《芋道 Spring Boot 监控端点 Actuator 入门》.md b/yshop-framework/yshop-spring-boot-starter-monitor/《芋道 Spring Boot 监控端点 Actuator 入门》.md
deleted file mode 100644
index df48157..0000000
--- a/yshop-framework/yshop-spring-boot-starter-monitor/《芋道 Spring Boot 监控端点 Actuator 入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-monitor/《芋道 Spring Boot 链路追踪 SkyWalking 入门》.md b/yshop-framework/yshop-spring-boot-starter-monitor/《芋道 Spring Boot 链路追踪 SkyWalking 入门》.md
deleted file mode 100644
index e502b67..0000000
--- a/yshop-framework/yshop-spring-boot-starter-monitor/《芋道 Spring Boot 链路追踪 SkyWalking 入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-mq/pom.xml b/yshop-framework/yshop-spring-boot-starter-mq/pom.xml
index 992c869..8d4923a 100644
--- a/yshop-framework/yshop-spring-boot-starter-mq/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-mq/pom.xml
@@ -13,7 +13,7 @@
${project.artifactId}
消息队列,基于 Redis Pub/Sub 实现广播消费,基于 Stream 实现集群消费
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-mybatis/pom.xml b/yshop-framework/yshop-spring-boot-starter-mybatis/pom.xml
index 67fdc11..5a7f5d3 100644
--- a/yshop-framework/yshop-spring-boot-starter-mybatis/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-mybatis/pom.xml
@@ -13,7 +13,7 @@
${project.artifactId}
数据库连接池、多数据源、事务、MyBatis 拓展
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-mybatis/《芋道 Spring Boot MyBatis 入门》.md b/yshop-framework/yshop-spring-boot-starter-mybatis/《芋道 Spring Boot MyBatis 入门》.md
deleted file mode 100644
index 9deae8a..0000000
--- a/yshop-framework/yshop-spring-boot-starter-mybatis/《芋道 Spring Boot MyBatis 入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-mybatis/《芋道 Spring Boot 多数据源(读写分离)入门》.md b/yshop-framework/yshop-spring-boot-starter-mybatis/《芋道 Spring Boot 多数据源(读写分离)入门》.md
deleted file mode 100644
index a2f32da..0000000
--- a/yshop-framework/yshop-spring-boot-starter-mybatis/《芋道 Spring Boot 多数据源(读写分离)入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-mybatis/《芋道 Spring Boot 数据库连接池入门》.md b/yshop-framework/yshop-spring-boot-starter-mybatis/《芋道 Spring Boot 数据库连接池入门》.md
deleted file mode 100644
index da86080..0000000
--- a/yshop-framework/yshop-spring-boot-starter-mybatis/《芋道 Spring Boot 数据库连接池入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-protection/pom.xml b/yshop-framework/yshop-spring-boot-starter-protection/pom.xml
index ecc0c89..743184e 100644
--- a/yshop-framework/yshop-spring-boot-starter-protection/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-protection/pom.xml
@@ -13,7 +13,7 @@
${project.artifactId}
服务保证,提供分布式锁、幂等、限流、熔断等等功能
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/resilience4j/《芋道 Spring Boot 服务容错 Resilience4j 入门》.md b/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/resilience4j/《芋道 Spring Boot 服务容错 Resilience4j 入门》.md
deleted file mode 100644
index 9b9e8bc..0000000
--- a/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/resilience4j/《芋道 Spring Boot 服务容错 Resilience4j 入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-redis/pom.xml b/yshop-framework/yshop-spring-boot-starter-redis/pom.xml
index 08f56b3..c3a3f32 100644
--- a/yshop-framework/yshop-spring-boot-starter-redis/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-redis/pom.xml
@@ -13,7 +13,7 @@
${project.artifactId}
Redis 封装拓展
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-redis/《芋道 Spring Boot Cache 入门》.md b/yshop-framework/yshop-spring-boot-starter-redis/《芋道 Spring Boot Cache 入门》.md
deleted file mode 100644
index baeb0f6..0000000
--- a/yshop-framework/yshop-spring-boot-starter-redis/《芋道 Spring Boot Cache 入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-redis/《芋道 Spring Boot Redis 入门》.md b/yshop-framework/yshop-spring-boot-starter-redis/《芋道 Spring Boot Redis 入门》.md
deleted file mode 100644
index 64352cc..0000000
--- a/yshop-framework/yshop-spring-boot-starter-redis/《芋道 Spring Boot Redis 入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-security/pom.xml b/yshop-framework/yshop-spring-boot-starter-security/pom.xml
index e18d3a9..9f0f341 100644
--- a/yshop-framework/yshop-spring-boot-starter-security/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-security/pom.xml
@@ -13,7 +13,7 @@
${project.artifactId}
用户的认证、权限的校验
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-security/《芋道 Spring Boot 安全框架 Spring Security 入门》.md b/yshop-framework/yshop-spring-boot-starter-security/《芋道 Spring Boot 安全框架 Spring Security 入门》.md
deleted file mode 100644
index 45a47c7..0000000
--- a/yshop-framework/yshop-spring-boot-starter-security/《芋道 Spring Boot 安全框架 Spring Security 入门》.md
+++ /dev/null
@@ -1,2 +0,0 @@
-* yshop Spring Security 入门:
-* Spring Security 基本概念:
diff --git a/yshop-framework/yshop-spring-boot-starter-test/pom.xml b/yshop-framework/yshop-spring-boot-starter-test/pom.xml
index 1c33877..d1a642f 100644
--- a/yshop-framework/yshop-spring-boot-starter-test/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-test/pom.xml
@@ -13,7 +13,7 @@
${project.artifactId}
测试组件,用于单元测试、集成测试
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-test/《芋道 Spring Boot 单元测试 Test 入门》.md b/yshop-framework/yshop-spring-boot-starter-test/《芋道 Spring Boot 单元测试 Test 入门》.md
deleted file mode 100644
index 0355f55..0000000
--- a/yshop-framework/yshop-spring-boot-starter-test/《芋道 Spring Boot 单元测试 Test 入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-web/pom.xml b/yshop-framework/yshop-spring-boot-starter-web/pom.xml
index 9222322..12567e8 100644
--- a/yshop-framework/yshop-spring-boot-starter-web/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-web/pom.xml
@@ -13,7 +13,7 @@
${project.artifactId}
Web 框架,全局异常、API 日志等
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-framework/yshop-spring-boot-starter-web/《芋道 Spring Boot API 接口文档 Swagger 入门》.md b/yshop-framework/yshop-spring-boot-starter-web/《芋道 Spring Boot API 接口文档 Swagger 入门》.md
deleted file mode 100644
index e2d0f0f..0000000
--- a/yshop-framework/yshop-spring-boot-starter-web/《芋道 Spring Boot API 接口文档 Swagger 入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-web/《芋道 Spring Boot SpringMVC 入门》.md b/yshop-framework/yshop-spring-boot-starter-web/《芋道 Spring Boot SpringMVC 入门》.md
deleted file mode 100644
index 82156d7..0000000
--- a/yshop-framework/yshop-spring-boot-starter-web/《芋道 Spring Boot SpringMVC 入门》.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yshop-framework/yshop-spring-boot-starter-websocket/pom.xml b/yshop-framework/yshop-spring-boot-starter-websocket/pom.xml
index 620b44f..21246a1 100644
--- a/yshop-framework/yshop-spring-boot-starter-websocket/pom.xml
+++ b/yshop-framework/yshop-spring-boot-starter-websocket/pom.xml
@@ -13,7 +13,7 @@
${project.artifactId}
WebSocket
- https://github.com/YunaiV/ruoyi-vue-pro
+ https://github.com/guchengwuyue/yshop-pro
diff --git a/yshop-module-express/.DS_Store b/yshop-module-express/.DS_Store
new file mode 100644
index 0000000..13425ad
Binary files /dev/null and b/yshop-module-express/.DS_Store differ
diff --git a/yshop-module-express/pom.xml b/yshop-module-express/pom.xml
new file mode 100644
index 0000000..6c0e2cd
--- /dev/null
+++ b/yshop-module-express/pom.xml
@@ -0,0 +1,24 @@
+
+
+
+ co.yixiang.boot
+ yshop
+ ${revision}
+
+ 4.0.0
+ yshop-module-express
+ pom
+
+ yshop-module-express-api
+ yshop-module-express-biz
+
+
+ ${project.artifactId}
+
+ pay 模块
+
+
+
+
diff --git a/yshop-module-express/yshop-module-express-api/.DS_Store b/yshop-module-express/yshop-module-express-api/.DS_Store
new file mode 100644
index 0000000..51c55bb
Binary files /dev/null and b/yshop-module-express/yshop-module-express-api/.DS_Store differ
diff --git a/yshop-module-express/yshop-module-express-api/pom.xml b/yshop-module-express/yshop-module-express-api/pom.xml
new file mode 100644
index 0000000..77053a1
--- /dev/null
+++ b/yshop-module-express/yshop-module-express-api/pom.xml
@@ -0,0 +1,41 @@
+
+
+
+ yshop-module-express
+ co.yixiang.boot
+ ${revision}
+
+ 4.0.0
+ yshop-module-express-api
+ jar
+
+ ${project.artifactId}
+
+ pay 模块 API,暴露给其它模块调用
+
+
+
+
+ co.yixiang.boot
+ yshop-common
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+ true
+
+
+
+
+ co.yixiang.boot
+ yshop-spring-boot-starter-mybatis
+
+
+
+
+
+
diff --git a/yshop-module-express/yshop-module-express-api/src/.DS_Store b/yshop-module-express/yshop-module-express-api/src/.DS_Store
new file mode 100644
index 0000000..038a03c
Binary files /dev/null and b/yshop-module-express/yshop-module-express-api/src/.DS_Store differ
diff --git a/yshop-module-express/yshop-module-express-api/src/main/.DS_Store b/yshop-module-express/yshop-module-express-api/src/main/.DS_Store
new file mode 100644
index 0000000..228f65a
Binary files /dev/null and b/yshop-module-express/yshop-module-express-api/src/main/.DS_Store differ
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/.DS_Store b/yshop-module-express/yshop-module-express-api/src/main/java/.DS_Store
new file mode 100644
index 0000000..49d2f94
Binary files /dev/null and b/yshop-module-express/yshop-module-express-api/src/main/java/.DS_Store differ
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/.DS_Store b/yshop-module-express/yshop-module-express-api/src/main/java/co/.DS_Store
new file mode 100644
index 0000000..2b288e3
Binary files /dev/null and b/yshop-module-express/yshop-module-express-api/src/main/java/co/.DS_Store differ
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/.DS_Store b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/.DS_Store
new file mode 100644
index 0000000..b738c36
Binary files /dev/null and b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/.DS_Store differ
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/.DS_Store b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/.DS_Store
new file mode 100644
index 0000000..5131c0b
Binary files /dev/null and b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/.DS_Store differ
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/.DS_Store b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/.DS_Store
new file mode 100644
index 0000000..5dfbd7e
Binary files /dev/null and b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/.DS_Store differ
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/enums/ErrorCodeConstants.java b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/enums/ErrorCodeConstants.java
new file mode 100644
index 0000000..76c99e0
--- /dev/null
+++ b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/enums/ErrorCodeConstants.java
@@ -0,0 +1,11 @@
+package co.yixiang.yshop.module.express.enums;
+
+import co.yixiang.yshop.framework.common.exception.ErrorCode;
+
+public interface ErrorCodeConstants {
+ // ========== 快递公司 1008008000 ==========
+ ErrorCode EXPRESS_NOT_EXISTS = new ErrorCode(1008008000, "快递公司不存在");
+ // ========== 电子面单 ==========
+ ErrorCode ELECTRONICS_ORDER_NOT_EXISTS = new ErrorCode(1008009000, "电子面单不存在");
+}
+
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/enums/KdniaoLogisticsCodeEnum.java b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/enums/KdniaoLogisticsCodeEnum.java
new file mode 100644
index 0000000..5c259b9
--- /dev/null
+++ b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/enums/KdniaoLogisticsCodeEnum.java
@@ -0,0 +1,73 @@
+package co.yixiang.yshop.module.express.kdniao.enums;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.SneakyThrows;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+
+/**
+ * 物流公司-对应编码-枚举
+ *
+ * @author hupeng
+ * @date 2023/7/219
+ */
+@Getter
+@AllArgsConstructor
+public enum KdniaoLogisticsCodeEnum {
+
+ /**
+ * 申通
+ */
+ STO("STO", "申通"),
+ /**
+ * 中通
+ */
+ ZTO("ZTO", "中通"),
+ /**
+ * 圆通
+ */
+ YTO("YTO", "圆通"),
+ /**
+ * 韵达
+ */
+ YD("YD", "韵达"),
+ /**
+ * 顺丰
+ */
+ SF("SF", "顺丰");
+
+ /**
+ * 物流编码
+ */
+ private final String code;
+ /**
+ * 物流名
+ */
+ private final String name;
+
+
+ private static final List LIST = new ArrayList();
+
+ static {
+ LIST.addAll(Arrays.asList(KdniaoLogisticsCodeEnum.values()));
+ }
+
+ /**
+ * 根据值查找相应枚举
+ */
+ @SneakyThrows(Exception.class)
+ public static KdniaoLogisticsCodeEnum getEnumByName(String name) {
+ for (KdniaoLogisticsCodeEnum itemEnum : LIST) {
+ if (itemEnum.getName().equals(name)) {
+ return itemEnum;
+ }
+ }
+ throw new Exception("暂无此物流编码信息,请联系系统管理员!");
+ }
+
+}
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/enums/KdniaoLogisticsStatusEnum.java b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/enums/KdniaoLogisticsStatusEnum.java
new file mode 100644
index 0000000..8c1746b
--- /dev/null
+++ b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/enums/KdniaoLogisticsStatusEnum.java
@@ -0,0 +1,134 @@
+package co.yixiang.yshop.module.express.kdniao.enums;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+
+/**
+ * 物流状态枚举
+ *
+ * @author hupeng
+ * @date 2023/7/219
+ */
+@Getter
+@AllArgsConstructor
+public enum KdniaoLogisticsStatusEnum {
+
+ /**
+ * 暂无轨迹信息
+ */
+ NO_TRACE(0, "暂无轨迹信息"),
+ /**
+ * 已揽收
+ */
+ HAVE_PAID(1, "已揽收"),
+ /**
+ * 已揽收 -----------------------------------------------------------------------------
+ */
+ ON_THE_WAY(2, "在途中"),
+ /**
+ * 到达派件城市
+ */
+ ARRIVE_AT_THE_DISPATCH_CITY(201, "到达派件城市"),
+ /**
+ * 派件中
+ */
+ IN_THE_DELIVERY(202, "派件中"),
+ /**
+ * 已放入快递柜或驿站
+ */
+ HAS_STORED(211, "已放入快递柜或驿站"),
+ /**
+ * 签收 -----------------------------------------------------------------------------
+ */
+ SIGN(3, "签收"),
+ /**
+ * 正常签收
+ */
+ SIGN_NORMAL(301, "正常签收"),
+ /**
+ * 派件异常后最终签收
+ */
+ SIGN_ABNORMAL(302, "派件异常后最终签收"),
+ /**
+ * 代收签收
+ */
+ SIGN_COLLECTION(304, "代收签收"),
+ /**
+ * 快递柜或驿站签收
+ */
+ SIGN_STORED(311, "快递柜或驿站签收"),
+ /**
+ * 问题件 -----------------------------------------------------------------------------
+ */
+ PROBLEM_SHIPMENT(4, "问题件"),
+ /**
+ * 发货无信息
+ */
+ DELIVERY_NO_INFO(401, "发货无信息"),
+ /**
+ * 超时未签收
+ */
+ NO_SIGN_OVER_TIME(402, "超时未签收"),
+ /**
+ * 超时未更新
+ */
+ NOT_UPDATED_DUE_TO_TIMEOUT(403, "超时未更新"),
+ /**
+ * 拒收(退件)
+ */
+ REJECTION(404, "拒收(退件)"),
+ /**
+ * 派件异常
+ */
+ SEND_A_ABNORMAL(405, "派件异常"),
+ /**
+ * 退货签收
+ */
+ RETURN_TO_SIGN_FOR(406, "退货签收"),
+ /**
+ * 退货未签收
+ */
+ RETURN_NOT_SIGNED_FOR(407, "退货未签收"),
+ /**
+ * 快递柜或驿站超时未取
+ */
+ STORED_OVER_TIME(412, "快递柜或驿站超时未取"),
+ /**
+ * -
+ */
+ DEFAULT(0, "-");
+
+ /**
+ * 状态
+ */
+ private final Integer status;
+ /**
+ * 描述
+ */
+ private final String desc;
+
+ private static final List LIST = new ArrayList();
+
+ static {
+ LIST.addAll(Arrays.asList(KdniaoLogisticsStatusEnum.values()));
+ }
+
+ /**
+ * 根据物流状态查找相应枚举
+ */
+ public static KdniaoLogisticsStatusEnum getEnum(Integer status) {
+ for (KdniaoLogisticsStatusEnum itemEnum : LIST) {
+ if (itemEnum.getStatus().equals(status)) {
+ return itemEnum;
+ }
+ }
+ return KdniaoLogisticsStatusEnum.DEFAULT;
+ }
+
+}
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoApiBaseDTO.java b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoApiBaseDTO.java
new file mode 100644
index 0000000..2d53bb7
--- /dev/null
+++ b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoApiBaseDTO.java
@@ -0,0 +1,34 @@
+package co.yixiang.yshop.module.express.kdniao.model.dto;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ *
+ * 快递鸟-物流-查询base参数
+ *
+ *
+ * @author hupeng
+ * @date 2023/7/21
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+//快递鸟-物流-查询base参数
+public class KdniaoApiBaseDTO {
+
+ //用户ID
+ private String eBusinessID;
+
+ //API key
+ private String apiKey;
+
+ //请求url
+ //https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx
+ private String reqURL;
+
+}
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoApiDTO.java b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoApiDTO.java
new file mode 100644
index 0000000..869fe83
--- /dev/null
+++ b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoApiDTO.java
@@ -0,0 +1,31 @@
+package co.yixiang.yshop.module.express.kdniao.model.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ *
+ * 快递鸟-物流-查询参数
+ *
+ *
+ * @author hupeng
+ * @date 2023/7/21
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+//快递鸟-物流-查询参数
+public class KdniaoApiDTO extends KdniaoApiBaseDTO {
+
+ //快递公司编码 ZTO
+ private String shipperCode;
+
+ //快递单号
+ private String logisticCode;
+
+}
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoElectronicsOrderDTO.java b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoElectronicsOrderDTO.java
new file mode 100644
index 0000000..60aefa7
--- /dev/null
+++ b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoElectronicsOrderDTO.java
@@ -0,0 +1,193 @@
+package co.yixiang.yshop.module.express.kdniao.model.dto;
+
+import lombok.*;
+
+/**
+ * 电子面单 DTO
+ *
+ * @author yshop
+ */
+@Data
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+public class KdniaoElectronicsOrderDTO extends KdniaoApiBaseDTO {
+
+ //用户
+ private Long memberID;
+
+ //订单编号
+ private String orderCode;
+
+ //快递公司编码
+ private String shipperCode;
+
+ //快递单号
+ private String logisticCode;
+
+ //其他费用
+ private Double otherCost;
+
+ /**
+ * 运费支付方式:1=现付,2=到付,3=月结,4=第三方付(仅SF支持)
+ */
+ private Integer paytype;
+ /**
+ * 线下网点客户号
+ */
+ private String customerName;
+ /**
+ * 线下网点密码
+ */
+ private String customerPwd;
+ /**
+ * 网点名称
+ */
+ private String sendSite;
+ /**
+ * 网点快递员
+ */
+ private String sendStaff;
+
+ //快递运费
+ private Double cost;
+ /**
+ * 月结编号
+ */
+ private String monthCode;
+ /**
+ * 是否通知揽件:0=通知揽件,1=不通知揽件
+ */
+ private Integer isNotice;
+ /**
+ * 是否返回电子面单模板:0=不返回,1=返回
+ */
+ private Integer isReturnTemp;
+ /**
+ * 是否需要短信提醒:0=否,1=是
+ */
+ private Integer isSendMessage;
+ /**
+ * 模板尺寸
+ */
+ private String templateSize;
+ /**
+ * 签回单操作要求(如:签名、盖章、身份证复印件等)
+ */
+ private String operateRequire;
+
+ /**
+ * 上门揽件开始时间
+ */
+ private Integer startDate;
+ /**
+ * 上门揽件结束时间
+ */
+ private Integer endDate;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 快递类型:1=标准快件
+ */
+ private Integer expType;
+ /**
+ * 是否要签回单:0=否,1=是
+ */
+ private Integer isReturnSignBill;
+ /**
+ * 发件人公司
+ */
+ private String company;
+ /**
+ * 发件人省
+ */
+ private String provinceName;
+ /**
+ * 发件人市
+ */
+ private String cityName;
+ /**
+ * 发件人区
+ */
+ private String expAreaName;
+ /**
+ * 发件人详细地址
+ */
+ private String address;
+ /**
+ * 发件人姓名
+ */
+ private String name;
+ /**
+ * 发件人电话
+ */
+ private String tel;
+ /**
+ * 发件人手机号码
+ */
+ private String mobile;
+ /**
+ * 发件地邮编
+ */
+ private String postCode;
+
+
+ /**
+ * 收件人公司
+ */
+ private String receiverCompany;
+ /**
+ * 收件人省
+ */
+ private String receiverProvinceName;
+ /**
+ * 收件人市
+ */
+ private String receiverCityName;
+ /**
+ * 收件人区
+ */
+ private String receiverExpAreaName;
+ /**
+ * 收件人详细地址
+ */
+ private String receiverAddress;
+ /**
+ * 收件人姓名
+ */
+ private String receiverName;
+ /**
+ * 收件人电话
+ */
+ private String receiverTel;
+ /**
+ * 收件人手机号码
+ */
+ private String receiverMobile;
+ /**
+ * 收件地邮编
+ */
+ private String receiverPostCode;
+
+ /**
+ * 重量
+ */
+ private Double weight;
+
+ /**
+ * 重量
+ */
+ private Integer quantity;
+
+ /**
+ * 体积
+ *
+ */
+ private Double volume;
+
+
+
+
+}
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoElectronicsOrderGoodsDTO.java b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoElectronicsOrderGoodsDTO.java
new file mode 100644
index 0000000..7e2387a
--- /dev/null
+++ b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoElectronicsOrderGoodsDTO.java
@@ -0,0 +1,52 @@
+package co.yixiang.yshop.module.express.kdniao.model.dto;
+
+import lombok.*;
+import org.omg.PortableInterceptor.INACTIVE;
+
+/**
+ * 电子面单 DTO
+ *
+ * @author yshop
+ */
+@Data
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class KdniaoElectronicsOrderGoodsDTO {
+
+ /**
+ * 商品名称
+ */
+ private String goodsName;
+
+ /**
+ * 商品编号
+ */
+ private String goodsCode;
+ /**
+ * 商品件数
+ */
+ private Integer goodsQuantity;
+ /**
+ * 商品价格
+ */
+ private Double goodsPrice;
+ /**
+ * 商品重量kg
+ */
+ private Double goodsWeight;
+ /**
+ * 商品描述
+ */
+ private String GoodsDesc;
+ /**
+ * 商品体积m³
+ */
+ private Double GoodsVol;
+
+
+
+
+
+}
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/vo/KdniaoApiVO.java b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/vo/KdniaoApiVO.java
new file mode 100644
index 0000000..888f9ed
--- /dev/null
+++ b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/vo/KdniaoApiVO.java
@@ -0,0 +1,122 @@
+package co.yixiang.yshop.module.express.kdniao.model.vo;
+
+
+import co.yixiang.yshop.module.express.kdniao.enums.KdniaoLogisticsStatusEnum;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * 快递鸟-物流-响应参数
+ *
+ * @author hupeng
+ * @date 2023/7/21
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class KdniaoApiVO {
+
+ /**
+ * {@link KdniaoLogisticsStatusEnum }
+ * 增值物流状态:
+ * 0-暂无轨迹信息
+ * 1-已揽收
+ * 2-在途中
+ * 201-到达派件城市, 202-派件中, 211-已放入快递柜或驿站,
+ * 3-已签收
+ * 301-正常签收, 302-派件异常后最终签收, 304-代收签收, 311-快递柜或驿站签收,
+ * 4-问题件
+ * 401-发货无信息, 402-超时未签收, 403-超时未更新, 404-拒收(退件), 405-派件异常, 406-退货签收, 407-退货未签收, 412-快递柜或驿站超时未取
+ */
+
+ //增值物流状态
+ private Integer StateEx;
+
+ //增值物流状态名称
+ private String statusExName;
+
+ //快递单号
+ private String LogisticCode;
+
+ //快递公司编码
+ private String ShipperCode;
+
+
+ //失败原因
+ private String Reason;
+
+
+ //事件轨迹集
+ private List Traces;
+
+ /**
+ * {@link KdniaoLogisticsStatusEnum }
+ */
+ //物流状态:0-暂无轨迹信息,1-已揽收,2-在途中,3-签收,4-问题件
+ private Integer State;
+
+ //状态名称
+ private String statusName;
+
+ //用户ID
+ private String EBusinessID;
+
+ //送货人
+ private String DeliveryMan;
+
+
+ //送货人电话号码
+ private String DeliveryManTel;
+
+ //成功与否 true/false
+ private String Success;
+
+
+ //所在城市
+ private String Location;
+
+ @Data
+ @Builder
+ @NoArgsConstructor
+ @AllArgsConstructor
+ //事件轨迹集
+ public static class TraceItem {
+ /**
+ * {@link KdniaoLogisticsStatusEnum }
+ */
+ //当前状态(同StateEx)
+ private Integer Action;
+
+ //状态名称
+ private String actionName;
+
+ //描述
+ private String AcceptStation;
+
+ //时间
+ private String AcceptTime;
+
+ //所在城市
+ private String Location;
+ }
+
+
+ public void handleData() {
+ this.statusName = KdniaoLogisticsStatusEnum.getEnum(this.State).getDesc();
+ this.statusExName = KdniaoLogisticsStatusEnum.getEnum(this.StateEx).getDesc();
+ if (CollectionUtils.isEmpty(this.Traces)) {
+ this.Traces = new ArrayList();
+ }
+ this.Traces.forEach(item -> item.actionName = KdniaoLogisticsStatusEnum.getEnum(item.Action).getDesc());
+ }
+
+}
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/vo/KdniaoLogisticsVO.java b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/vo/KdniaoLogisticsVO.java
new file mode 100644
index 0000000..cd5ba35
--- /dev/null
+++ b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/vo/KdniaoLogisticsVO.java
@@ -0,0 +1,97 @@
+package co.yixiang.yshop.module.express.kdniao.model.vo;
+
+import co.yixiang.yshop.module.express.kdniao.enums.KdniaoLogisticsCodeEnum;
+import co.yixiang.yshop.module.express.kdniao.enums.KdniaoLogisticsStatusEnum;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 快递鸟-物流-参数
+ *
+ * @author hupeng
+ * @date 2023/7/21
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class KdniaoLogisticsVO {
+
+ /**
+ * {@link KdniaoLogisticsCodeEnum }
+ */
+ //快递公司编码
+ private String logisticsCode;
+
+ //快递单号
+ private String logisticsNo;
+
+ //事件轨迹集
+ private List traceList;
+
+ //送货人名称
+ private String delivererName;
+
+
+ //送货人电话号码
+ private String delivererPhone;
+
+ //所在城市
+ private String location;
+
+ /**
+ * {@link KdniaoLogisticsStatusEnum }
+ */
+ //物流状态
+ private Integer status;
+
+ //状态名称
+ private String statusName;
+
+ /**
+ * {@link KdniaoLogisticsStatusEnum }
+ */
+ //增值物流状态
+ private Integer statusEx;
+
+ //增值物流状态名称
+ private String statusExName;
+
+ @Data
+ @Builder
+ @NoArgsConstructor
+ @AllArgsConstructor
+ //事件轨迹集
+ public static class TraceItem {
+ //状态
+ private Integer status;
+
+ //状态名称
+ private String statusName;
+
+ //描述
+ private String desc;
+
+ //时间
+ private String time;
+
+ //所在城市
+ private String location;
+ }
+
+ public void handleData() {
+ this.statusName = KdniaoLogisticsStatusEnum.getEnum(this.status).getDesc();
+ this.statusExName = KdniaoLogisticsStatusEnum.getEnum(this.statusEx).getDesc();
+ if (CollectionUtils.isEmpty(this.traceList)) {
+ this.traceList = new ArrayList();
+ }
+ this.traceList.forEach(item -> item.statusName = KdniaoLogisticsStatusEnum.getEnum(item.status).getDesc());
+ }
+
+}
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/vo/KdniaoOrderVO.java b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/vo/KdniaoOrderVO.java
new file mode 100644
index 0000000..a2cef70
--- /dev/null
+++ b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/vo/KdniaoOrderVO.java
@@ -0,0 +1,114 @@
+package co.yixiang.yshop.module.express.kdniao.model.vo;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ *
+ * 快递鸟-面单-响应参数
+ *
+ * @author hupeng
+ * @date 2023/7/22
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class KdniaoOrderVO {
+ //返回编码
+ private String ResultCode;
+
+ //失败原因
+ private String Reason;
+
+ //成功与否 true/false
+ private String Success;
+
+ //面单打印模板内容(html格式)
+ private String PrintTemplate;
+
+ //唯一标识
+ private String UniquerRequestNumber;
+
+ //子单数量
+ private Integer SubCount;
+
+ //子单单号
+ private String SubOrders;
+
+ //子单模板内容(html格式)
+ private String SubPrintTemplates;
+
+ //签回单模板内容
+ private String SignBillPrintTemplate;
+
+ //订单信息
+ private OrderInfo Order;
+
+
+
+ @Data
+ @Builder
+ @NoArgsConstructor
+ @AllArgsConstructor
+ public static class OrderInfo {
+
+ //订单编号
+ private String OrderCode;
+
+ //快递公司编码
+ private String ShipperCode;
+
+ //快递单号
+ private String LogisticCode;
+
+ //大头笔
+ private String MarkDestination;
+
+ //签回单单号
+ private String SignWaybillCode;
+
+
+ //始发地区域编码
+ private String OriginCode;
+
+ //始发地/始发网点
+ private String OriginName;
+
+ //目的地区域编码
+ private String DestinatioCode;
+
+ //目的地/到达网点
+ private String DestinatioName;
+
+ //分拣编码
+ private String SortingCode;
+
+
+ //集包编码
+ private String PackageCode;
+
+ //集包地
+ private String PackageName;
+
+ //目的地分拨
+ private String DestinationAllocationCentre;
+
+ //配送产品类型
+ private Integer TransType;
+
+ //运输方式(用于自行设计京东模板):
+ //0:陆运
+ //1:航空
+ private Integer TransportType;
+
+ //自行设计模板用
+ private String ShipperInfo;
+ }
+
+
+}
diff --git a/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/util/KdniaoUtil.java b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/util/KdniaoUtil.java
new file mode 100644
index 0000000..a386253
--- /dev/null
+++ b/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/util/KdniaoUtil.java
@@ -0,0 +1,339 @@
+package co.yixiang.yshop.module.express.kdniao.util;
+
+import co.yixiang.yshop.framework.common.exception.ErrorCode;
+import co.yixiang.yshop.framework.common.exception.util.ServiceExceptionUtil;
+import co.yixiang.yshop.module.express.kdniao.model.dto.KdniaoApiDTO;
+import co.yixiang.yshop.module.express.kdniao.model.dto.KdniaoElectronicsOrderDTO;
+import co.yixiang.yshop.module.express.kdniao.model.dto.KdniaoElectronicsOrderGoodsDTO;
+import co.yixiang.yshop.module.express.kdniao.model.vo.KdniaoApiVO;
+import co.yixiang.yshop.module.express.kdniao.model.vo.KdniaoOrderVO;
+import com.alibaba.fastjson.JSON;
+import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.security.MessageDigest;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 快递鸟工具类
+ *
+ * @author hupeng
+ * @date 2023/7/219
+ */
+@Slf4j
+public class KdniaoUtil {
+ //查询物流当url
+ private final String KDNIAO_LOGISTIC_QUERY = "https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
+ //电子面单url
+ private final String KDNIAO_ELECT_QUERY = "https://api.kdniao.com/api/EOrderService";
+
+ /**
+ * 快递查询接口
+ *
+ * @param queryDTO 请求参数
+ * @return 物流信息
+ */
+ public static KdniaoApiVO getLogisticInfo(KdniaoApiDTO queryDTO){
+ KdniaoApiVO kdniaoApiVO = new KdniaoUtil().getLogisticBase(queryDTO);
+ if (kdniaoApiVO.getSuccess() == "false"){
+ throw ServiceExceptionUtil.exception(new ErrorCode(999999,kdniaoApiVO.getReason()));
+ }
+
+ kdniaoApiVO.handleData();
+ return kdniaoApiVO;
+ }
+
+ /**
+ * 获取电子面单信息
+ * @param queryDTO
+ * @param kdniaoElectronicsOrderGoodsDTOList
+ * @return
+ */
+ public static KdniaoOrderVO getOrderInfo(KdniaoElectronicsOrderDTO queryDTO,
+ List kdniaoElectronicsOrderGoodsDTOList) {
+ KdniaoOrderVO kdniaoOrderVO = new KdniaoUtil().getEleCtBase(queryDTO,kdniaoElectronicsOrderGoodsDTOList);
+ //todo 由于目前快递鸟订单打印需要申请当地营业网店账号 所有目前这个没法测试 如果有其他用户有可以测试反馈给我们官方
+ if (kdniaoOrderVO.getSuccess() == "false"){
+ log.error(kdniaoOrderVO.getReason());
+ throw ServiceExceptionUtil.exception(new ErrorCode(999999,kdniaoOrderVO.getReason()));
+ }
+
+ return kdniaoOrderVO;
+ }
+
+ /**
+ * 快递查询接口
+ *
+ * @param queryDTO 请求参数
+ * @return 物流信息
+ */
+ @SneakyThrows(Exception.class)
+ private KdniaoApiVO getLogisticBase(KdniaoApiDTO queryDTO) {
+ String EBusinessID = queryDTO.getEBusinessID();
+ String ApiKey = queryDTO.getApiKey();
+ String shipperCode = queryDTO.getShipperCode();
+ String logisticCode = queryDTO.getLogisticCode();
+
+ // 组装应用级参数
+ Map requestParamMap = new HashMap<>();
+ requestParamMap.put("shipperCode", shipperCode);
+ requestParamMap.put("LogisticCode", logisticCode);
+ String RequestData = JSON.toJSONString(requestParamMap);
+ // 组装系统级参数
+ Map params = new HashMap<>();
+ params.put("RequestData", this.urlEncoder(RequestData, "UTF-8"));
+ params.put("EBusinessID", EBusinessID);
+ params.put("RequestType", "1002");//免费1002 收费8001
+ String dataSign = this.encrypt(RequestData, ApiKey, "UTF-8");
+ params.put("DataSign", this.urlEncoder(dataSign, "UTF-8"));
+ params.put("DataType", "2");
+ // 以form表单形式提交post请求,post请求体中包含了应用级参数和系统级参数
+ String resultJson = this.sendPost(KDNIAO_LOGISTIC_QUERY, params);
+ return JSON.parseObject(resultJson, KdniaoApiVO.class);
+ }
+
+ /**
+ * 快递查询接口
+ *
+ * @param queryDTO 请求参数
+ * @return 物流信息
+ */
+ @SneakyThrows(Exception.class)
+ private KdniaoOrderVO getEleCtBase(KdniaoElectronicsOrderDTO queryDTO,
+ List kdniaoElectronicsOrderGoodsDTOList) {
+ String EBusinessID = queryDTO.getEBusinessID();
+ String ApiKey = queryDTO.getApiKey();
+
+
+ Map requestParamMap = this.doMap(queryDTO,kdniaoElectronicsOrderGoodsDTOList);
+ System.out.println("map:"+requestParamMap);
+ String RequestData = JSON.toJSONString(requestParamMap);
+ // 组装系统级参数
+ Map params = new HashMap<>();
+ params.put("RequestData", this.urlEncoder(RequestData, "UTF-8"));
+ params.put("EBusinessID", EBusinessID);
+ params.put("RequestType", "1007");
+ String dataSign = this.encrypt(RequestData, ApiKey, "UTF-8");
+ params.put("DataSign", this.urlEncoder(dataSign, "UTF-8"));
+ params.put("DataType", "2");
+
+ String resultJson = this.sendPost(KDNIAO_ELECT_QUERY, params);
+ return JSON.parseObject(resultJson, KdniaoOrderVO.class);
+ }
+
+ //组合数据
+ private Map doMap(KdniaoElectronicsOrderDTO queryDTO,
+ List kdniaoElectronicsOrderGoodsDTOList){
+
+ // 组装应用级参数
+ Map requestParamMap = new HashMap<>();
+ requestParamMap.put("MemberID", queryDTO.getMemberID());
+ requestParamMap.put("OrderCode", queryDTO.getOrderCode());
+ requestParamMap.put("ShipperCode", queryDTO.getShipperCode());
+ requestParamMap.put("LogisticCode", queryDTO.getLogisticCode());
+ requestParamMap.put("CustomerName", queryDTO.getCustomerName());
+ requestParamMap.put("CustomerPwd", queryDTO.getCustomerPwd());
+ requestParamMap.put("SendSite", queryDTO.getSendSite());
+
+ requestParamMap.put("PayType", queryDTO.getPaytype());
+ requestParamMap.put("MonthCode", queryDTO.getMonthCode());
+ requestParamMap.put("IsReturnSignBill", queryDTO.getIsReturnSignBill());
+ requestParamMap.put("OperateRequire", queryDTO.getOperateRequire());
+ requestParamMap.put("ExpType", queryDTO.getExpType());
+ requestParamMap.put("Cost", queryDTO.getCost());
+
+ requestParamMap.put("OtherCost", queryDTO.getOtherCost());
+
+ Map senderMap = new HashMap<>();
+ senderMap.put("Name", queryDTO.getName());
+ senderMap.put("Tel", queryDTO.getTel());
+ senderMap.put("Company", queryDTO.getCompany());
+ senderMap.put("Mobile", queryDTO.getMobile());
+ senderMap.put("PostCode", queryDTO.getPostCode());
+ senderMap.put("ProvinceName", queryDTO.getProvinceName());
+ senderMap.put("CityName", queryDTO.getCityName());
+ senderMap.put("ExpAreaName", queryDTO.getExpAreaName());
+ senderMap.put("Address", queryDTO.getAddress());
+ requestParamMap.put("Sender", senderMap);
+
+ Map receiverMap = new HashMap<>();
+ receiverMap.put("Name", queryDTO.getReceiverName());
+ receiverMap.put("Tel", queryDTO.getReceiverTel());
+ receiverMap.put("Company", queryDTO.getReceiverCompany());
+ receiverMap.put("Mobile", queryDTO.getReceiverMobile());
+ receiverMap.put("PostCode", queryDTO.getReceiverPostCode());
+ receiverMap.put("ProvinceName", queryDTO.getReceiverProvinceName());
+ receiverMap.put("CityName", queryDTO.getReceiverCityName());
+ receiverMap.put("ExpAreaName", queryDTO.getReceiverExpAreaName());
+ receiverMap.put("Address", queryDTO.getReceiverAddress());
+ requestParamMap.put("Receiver", receiverMap);
+
+ List
+
+ co.yixiang.boot
+ yshop-module-member-biz
+ ${revision}
+
diff --git a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/StoreCartController.java b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/StoreCartController.java
index 88ddaae..543f541 100644
--- a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/StoreCartController.java
+++ b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/StoreCartController.java
@@ -1,32 +1,21 @@
package co.yixiang.yshop.module.cart.controller.admin.storecart;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Operation;
-
-import javax.validation.constraints.*;
-import javax.validation.*;
-import javax.servlet.http.*;
-import java.util.*;
-import java.io.IOException;
-
-import co.yixiang.yshop.framework.common.pojo.PageResult;
import co.yixiang.yshop.framework.common.pojo.CommonResult;
-import static co.yixiang.yshop.framework.common.pojo.CommonResult.success;
-
-import co.yixiang.yshop.framework.excel.core.util.ExcelUtils;
-
-import co.yixiang.yshop.framework.operatelog.core.annotations.OperateLog;
-import static co.yixiang.yshop.framework.operatelog.core.enums.OperateTypeEnum.*;
-
-import co.yixiang.yshop.module.cart.controller.admin.storecart.vo.*;
-import co.yixiang.yshop.module.cart.dal.dataobject.storecart.StoreCartDO;
-import co.yixiang.yshop.module.cart.convert.storecart.StoreCartConvert;
+import co.yixiang.yshop.framework.common.pojo.PageResult;
+import co.yixiang.yshop.module.cart.controller.admin.storecart.vo.StoreCartPageReqVO;
+import co.yixiang.yshop.module.cart.controller.admin.storecart.vo.StoreCartRespVO;
import co.yixiang.yshop.module.cart.service.storecart.StoreCartService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import static co.yixiang.yshop.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 购物车")
@RestController
@@ -37,20 +26,6 @@ public class StoreCartController {
@Resource
private StoreCartService storeCartService;
- @PostMapping("/create")
- @Operation(summary = "创建购物车")
- @PreAuthorize("@ss.hasPermission('cart:store-cart:create')")
- public CommonResult createStoreCart(@Valid @RequestBody StoreCartCreateReqVO createReqVO) {
- return success(storeCartService.createStoreCart(createReqVO));
- }
-
- @PutMapping("/update")
- @Operation(summary = "更新购物车")
- @PreAuthorize("@ss.hasPermission('cart:store-cart:update')")
- public CommonResult updateStoreCart(@Valid @RequestBody StoreCartUpdateReqVO updateReqVO) {
- storeCartService.updateStoreCart(updateReqVO);
- return success(true);
- }
@DeleteMapping("/delete")
@Operation(summary = "删除购物车")
@@ -61,42 +36,15 @@ public class StoreCartController {
return success(true);
}
- @GetMapping("/get")
- @Operation(summary = "获得购物车")
- @Parameter(name = "id", description = "编号", required = true, example = "1024")
- @PreAuthorize("@ss.hasPermission('cart:store-cart:query')")
- public CommonResult getStoreCart(@RequestParam("id") Long id) {
- StoreCartDO storeCart = storeCartService.getStoreCart(id);
- return success(StoreCartConvert.INSTANCE.convert(storeCart));
- }
- @GetMapping("/list")
- @Operation(summary = "获得购物车列表")
- @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
- @PreAuthorize("@ss.hasPermission('cart:store-cart:query')")
- public CommonResult> getStoreCartList(@RequestParam("ids") Collection ids) {
- List list = storeCartService.getStoreCartList(ids);
- return success(StoreCartConvert.INSTANCE.convertList(list));
- }
@GetMapping("/page")
@Operation(summary = "获得购物车分页")
@PreAuthorize("@ss.hasPermission('cart:store-cart:query')")
public CommonResult> getStoreCartPage(@Valid StoreCartPageReqVO pageVO) {
- PageResult pageResult = storeCartService.getStoreCartPage(pageVO);
- return success(StoreCartConvert.INSTANCE.convertPage(pageResult));
+ return success(storeCartService.getStoreCartPage(pageVO));
}
- @GetMapping("/export-excel")
- @Operation(summary = "导出购物车 Excel")
- @PreAuthorize("@ss.hasPermission('cart:store-cart:export')")
- @OperateLog(type = EXPORT)
- public void exportStoreCartExcel(@Valid StoreCartExportReqVO exportReqVO,
- HttpServletResponse response) throws IOException {
- List list = storeCartService.getStoreCartList(exportReqVO);
- // 导出 Excel
- List datas = StoreCartConvert.INSTANCE.convertList02(list);
- ExcelUtils.write(response, "购物车.xls", "数据", StoreCartExcelVO.class, datas);
- }
+
}
diff --git a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartCreateReqVO.java b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartCreateReqVO.java
deleted file mode 100644
index 2b81203..0000000
--- a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartCreateReqVO.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package co.yixiang.yshop.module.cart.controller.admin.storecart.vo;
-
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import javax.validation.constraints.*;
-
-@Schema(description = "管理后台 - 购物车创建 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class StoreCartCreateReqVO extends StoreCartBaseVO {
-
-}
diff --git a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartExcelVO.java b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartExcelVO.java
deleted file mode 100644
index 9dd5cf7..0000000
--- a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartExcelVO.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package co.yixiang.yshop.module.cart.controller.admin.storecart.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-
-/**
- * 购物车 Excel VO
- *
- * @author yshop
- */
-@Data
-public class StoreCartExcelVO {
-
- @ExcelProperty("购物车表ID")
- private Long id;
-
- @ExcelProperty("用户ID")
- private Long uid;
-
- @ExcelProperty("类型")
- private String type;
-
- @ExcelProperty("商品ID")
- private Long productId;
-
- @ExcelProperty("商品属性")
- private String productAttrUnique;
-
- @ExcelProperty("商品数量")
- private Integer cartNum;
-
- @ExcelProperty("0 = 未购买 1 = 已购买")
- private Integer isPay;
-
- @ExcelProperty("是否为立即购买")
- private Integer isNew;
-
- @ExcelProperty("拼团id")
- private Integer combinationId;
-
- @ExcelProperty("秒杀产品ID")
- private Integer seckillId;
-
- @ExcelProperty("砍价id")
- private Integer bargainId;
-
- @ExcelProperty("添加时间")
- private LocalDateTime createTime;
-
-}
diff --git a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartExportReqVO.java b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartExportReqVO.java
deleted file mode 100644
index 3838d89..0000000
--- a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartExportReqVO.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package co.yixiang.yshop.module.cart.controller.admin.storecart.vo;
-
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import co.yixiang.yshop.framework.common.pojo.PageParam;
-import java.time.LocalDateTime;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import static co.yixiang.yshop.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - 购物车 Excel 导出 Request VO,参数和 StoreCartPageReqVO 是一致的")
-@Data
-public class StoreCartExportReqVO {
-
- @Schema(description = "用户ID", example = "10667")
- private Long uid;
-
- @Schema(description = "类型", example = "1")
- private String type;
-
- @Schema(description = "商品ID", example = "1696")
- private Long productId;
-
- @Schema(description = "商品属性")
- private String productAttrUnique;
-
- @Schema(description = "商品数量")
- private Short cartNum;
-
- @Schema(description = "0 = 未购买 1 = 已购买")
- private Boolean isPay;
-
- @Schema(description = "是否为立即购买")
- private Boolean isNew;
-
- @Schema(description = "拼团id", example = "13847")
- private Integer combinationId;
-
- @Schema(description = "秒杀产品ID", example = "8790")
- private Integer seckillId;
-
- @Schema(description = "砍价id", example = "21581")
- private Integer bargainId;
-
- @Schema(description = "添加时间")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private LocalDateTime[] createTime;
-
-}
diff --git a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartRespVO.java b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartRespVO.java
index 3407722..fc5f8b9 100644
--- a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartRespVO.java
+++ b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartRespVO.java
@@ -16,4 +16,10 @@ public class StoreCartRespVO extends StoreCartBaseVO {
@Schema(description = "添加时间", required = true)
private LocalDateTime createTime;
+ @Schema(description = "商品名称", required = true)
+ private String StoreName;
+
+ @Schema(description = "用户昵称", required = true)
+ private String nickname;
+
}
diff --git a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartUpdateReqVO.java b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartUpdateReqVO.java
deleted file mode 100644
index b2f6780..0000000
--- a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/controller/admin/storecart/vo/StoreCartUpdateReqVO.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package co.yixiang.yshop.module.cart.controller.admin.storecart.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import javax.validation.constraints.*;
-
-@Schema(description = "管理后台 - 购物车更新 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class StoreCartUpdateReqVO extends StoreCartBaseVO {
-
- @Schema(description = "购物车表ID", required = true, example = "11256")
- @NotNull(message = "购物车表ID不能为空")
- private Long id;
-
-}
diff --git a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/convert/storecart/StoreCartConvert.java b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/convert/storecart/StoreCartConvert.java
index 3ea147f..d0eba0e 100644
--- a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/convert/storecart/StoreCartConvert.java
+++ b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/convert/storecart/StoreCartConvert.java
@@ -20,10 +20,6 @@ public interface StoreCartConvert {
StoreCartConvert INSTANCE = Mappers.getMapper(StoreCartConvert.class);
- StoreCartDO convert(StoreCartCreateReqVO bean);
-
- StoreCartDO convert(StoreCartUpdateReqVO bean);
-
StoreCartRespVO convert(StoreCartDO bean);
AppStoreCartQueryVo convert01(StoreCartDO bean);
@@ -32,6 +28,5 @@ public interface StoreCartConvert {
PageResult convertPage(PageResult page);
- List convertList02(List list);
}
diff --git a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/dal/mysql/storecart/StoreCartMapper.java b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/dal/mysql/storecart/StoreCartMapper.java
index 3f23ee6..7b417fa 100644
--- a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/dal/mysql/storecart/StoreCartMapper.java
+++ b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/dal/mysql/storecart/StoreCartMapper.java
@@ -35,21 +35,7 @@ public interface StoreCartMapper extends BaseMapperX {
.orderByDesc(StoreCartDO::getId));
}
- default List selectList(StoreCartExportReqVO reqVO) {
- return selectList(new LambdaQueryWrapperX()
- .eqIfPresent(StoreCartDO::getUid, reqVO.getUid())
- .eqIfPresent(StoreCartDO::getType, reqVO.getType())
- .eqIfPresent(StoreCartDO::getProductId, reqVO.getProductId())
- .eqIfPresent(StoreCartDO::getProductAttrUnique, reqVO.getProductAttrUnique())
- .eqIfPresent(StoreCartDO::getCartNum, reqVO.getCartNum())
- .eqIfPresent(StoreCartDO::getIsPay, reqVO.getIsPay())
- .eqIfPresent(StoreCartDO::getIsNew, reqVO.getIsNew())
- .eqIfPresent(StoreCartDO::getCombinationId, reqVO.getCombinationId())
- .eqIfPresent(StoreCartDO::getSeckillId, reqVO.getSeckillId())
- .eqIfPresent(StoreCartDO::getBargainId, reqVO.getBargainId())
- .betweenIfPresent(StoreCartDO::getCreateTime, reqVO.getCreateTime())
- .orderByDesc(StoreCartDO::getId));
- }
+
@Select("select IFNULL(sum(cart_num),0) from yshop_store_cart " +
"where is_pay=0 and deleted=0 and is_new=0 and uid=#{uid}")
diff --git a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/service/storecart/StoreCartService.java b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/service/storecart/StoreCartService.java
index ead9f16..2d11b43 100644
--- a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/service/storecart/StoreCartService.java
+++ b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/service/storecart/StoreCartService.java
@@ -1,10 +1,8 @@
package co.yixiang.yshop.module.cart.service.storecart;
-import java.util.*;
-import javax.validation.*;
-import co.yixiang.yshop.module.cart.controller.admin.storecart.vo.*;
-import co.yixiang.yshop.module.cart.dal.dataobject.storecart.StoreCartDO;
import co.yixiang.yshop.framework.common.pojo.PageResult;
+import co.yixiang.yshop.module.cart.controller.admin.storecart.vo.StoreCartPageReqVO;
+import co.yixiang.yshop.module.cart.controller.admin.storecart.vo.StoreCartRespVO;
/**
* 购物车 Service 接口
@@ -13,20 +11,6 @@ import co.yixiang.yshop.framework.common.pojo.PageResult;
*/
public interface StoreCartService {
- /**
- * 创建购物车
- *
- * @param createReqVO 创建信息
- * @return 编号
- */
- Long createStoreCart(@Valid StoreCartCreateReqVO createReqVO);
-
- /**
- * 更新购物车
- *
- * @param updateReqVO 更新信息
- */
- void updateStoreCart(@Valid StoreCartUpdateReqVO updateReqVO);
/**
* 删除购物车
@@ -35,21 +19,6 @@ public interface StoreCartService {
*/
void deleteStoreCart(Long id);
- /**
- * 获得购物车
- *
- * @param id 编号
- * @return 购物车
- */
- StoreCartDO getStoreCart(Long id);
-
- /**
- * 获得购物车列表
- *
- * @param ids 编号
- * @return 购物车列表
- */
- List getStoreCartList(Collection ids);
/**
* 获得购物车分页
@@ -57,14 +26,8 @@ public interface StoreCartService {
* @param pageReqVO 分页查询
* @return 购物车分页
*/
- PageResult getStoreCartPage(StoreCartPageReqVO pageReqVO);
+ PageResult getStoreCartPage(StoreCartPageReqVO pageReqVO);
+
- /**
- * 获得购物车列表, 用于 Excel 导出
- *
- * @param exportReqVO 查询条件
- * @return 购物车列表
- */
- List getStoreCartList(StoreCartExportReqVO exportReqVO);
}
diff --git a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/service/storecart/StoreCartServiceImpl.java b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/service/storecart/StoreCartServiceImpl.java
index 4c370b5..f4c01f9 100644
--- a/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/service/storecart/StoreCartServiceImpl.java
+++ b/yshop-module-mall/yshop-module-cart-biz/src/main/java/co/yixiang/yshop/module/cart/service/storecart/StoreCartServiceImpl.java
@@ -1,9 +1,14 @@
package co.yixiang.yshop.module.cart.service.storecart;
+import co.yixiang.yshop.module.member.dal.dataobject.user.MemberUserDO;
+import co.yixiang.yshop.module.member.dal.mysql.user.MemberUserMapper;
+import co.yixiang.yshop.module.product.dal.dataobject.storeproduct.StoreProductDO;
+import co.yixiang.yshop.module.product.dal.mysql.storeproduct.StoreProductMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
+import java.lang.reflect.Member;
import java.util.*;
import co.yixiang.yshop.module.cart.controller.admin.storecart.vo.*;
import co.yixiang.yshop.module.cart.dal.dataobject.storecart.StoreCartDO;
@@ -26,24 +31,11 @@ public class StoreCartServiceImpl implements StoreCartService {
@Resource
private StoreCartMapper storeCartMapper;
+ @Resource
+ private StoreProductMapper storeProductMapper;
+ @Resource
+ private MemberUserMapper memberUserMapper;
- @Override
- public Long createStoreCart(StoreCartCreateReqVO createReqVO) {
- // 插入
- StoreCartDO storeCart = StoreCartConvert.INSTANCE.convert(createReqVO);
- storeCartMapper.insert(storeCart);
- // 返回
- return storeCart.getId();
- }
-
- @Override
- public void updateStoreCart(StoreCartUpdateReqVO updateReqVO) {
- // 校验存在
- validateStoreCartExists(updateReqVO.getId());
- // 更新
- StoreCartDO updateObj = StoreCartConvert.INSTANCE.convert(updateReqVO);
- storeCartMapper.updateById(updateObj);
- }
@Override
public void deleteStoreCart(Long id) {
@@ -59,24 +51,20 @@ public class StoreCartServiceImpl implements StoreCartService {
}
}
- @Override
- public StoreCartDO getStoreCart(Long id) {
- return storeCartMapper.selectById(id);
- }
@Override
- public List getStoreCartList(Collection ids) {
- return storeCartMapper.selectBatchIds(ids);
+ public PageResult getStoreCartPage(StoreCartPageReqVO pageReqVO) {
+ PageResult pageResult = storeCartMapper.selectPage(pageReqVO);
+ PageResult storeCartRespVO = StoreCartConvert.INSTANCE.convertPage(pageResult);
+ for (StoreCartRespVO storeCartRespVO1 : storeCartRespVO.getList()) {
+ StoreProductDO storeProductDO = storeProductMapper.selectById(storeCartRespVO1.getProductId());
+ MemberUserDO memberUserDO = memberUserMapper.selectById(storeCartRespVO1.getUid());
+ storeCartRespVO1.setNickname(memberUserDO.getNickname());
+ storeCartRespVO1.setStoreName(storeProductDO.getStoreName());
+ }
+ return storeCartRespVO;
}
- @Override
- public PageResult getStoreCartPage(StoreCartPageReqVO pageReqVO) {
- return storeCartMapper.selectPage(pageReqVO);
- }
- @Override
- public List getStoreCartList(StoreCartExportReqVO exportReqVO) {
- return storeCartMapper.selectList(exportReqVO);
- }
}
diff --git a/yshop-module-mall/yshop-module-cart-biz/src/main/resources/mapper/storecart/StoreCartMapper.xml b/yshop-module-mall/yshop-module-cart-biz/src/main/resources/mapper/storecart/StoreCartMapper.xml
index d2c8949..48c1a86 100644
--- a/yshop-module-mall/yshop-module-cart-biz/src/main/resources/mapper/storecart/StoreCartMapper.xml
+++ b/yshop-module-mall/yshop-module-cart-biz/src/main/resources/mapper/storecart/StoreCartMapper.xml
@@ -6,7 +6,7 @@
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
- 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+ 文档可见:https://www.yixiang.co/MyBatis/x-plugins/
-->
diff --git a/yshop-module-mall/yshop-module-cart-biz/src/test/java/co/yixiang/yshop/module/cart/service/storecart/StoreCartServiceImplTest.java b/yshop-module-mall/yshop-module-cart-biz/src/test/java/co/yixiang/yshop/module/cart/service/storecart/StoreCartServiceImplTest.java
deleted file mode 100644
index 112480b..0000000
--- a/yshop-module-mall/yshop-module-cart-biz/src/test/java/co/yixiang/yshop/module/cart/service/storecart/StoreCartServiceImplTest.java
+++ /dev/null
@@ -1,231 +0,0 @@
-package co.yixiang.yshop.module.cart.service.storecart;
-
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.mock.mockito.MockBean;
-
-import javax.annotation.Resource;
-
-import co.yixiang.yshop.framework.test.core.ut.BaseDbUnitTest;
-
-import co.yixiang.yshop.module.cart.controller.admin.storecart.vo.*;
-import co.yixiang.yshop.module.cart.dal.dataobject.storecart.StoreCartDO;
-import co.yixiang.yshop.module.cart.dal.mysql.storecart.StoreCartMapper;
-import co.yixiang.yshop.framework.common.pojo.PageResult;
-
-import javax.annotation.Resource;
-import org.springframework.context.annotation.Import;
-import java.util.*;
-import java.time.LocalDateTime;
-
-import static cn.hutool.core.util.RandomUtil.*;
-import static co.yixiang.yshop.module.cart.enums.ErrorCodeConstants.*;
-import static co.yixiang.yshop.framework.test.core.util.AssertUtils.*;
-import static co.yixiang.yshop.framework.test.core.util.RandomUtils.*;
-import static co.yixiang.yshop.framework.common.util.date.LocalDateTimeUtils.*;
-import static co.yixiang.yshop.framework.common.util.object.ObjectUtils.*;
-import static co.yixiang.yshop.framework.common.util.date.DateUtils.*;
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-/**
-* {@link StoreCartServiceImpl} 的单元测试类
-*
-* @author yshop
-*/
-@Import(StoreCartServiceImpl.class)
-public class StoreCartServiceImplTest extends BaseDbUnitTest {
-
- @Resource
- private StoreCartServiceImpl storeCartService;
-
- @Resource
- private StoreCartMapper storeCartMapper;
-
- @Test
- public void testCreateStoreCart_success() {
- // 准备参数
- StoreCartCreateReqVO reqVO = randomPojo(StoreCartCreateReqVO.class);
-
- // 调用
- Long storeCartId = storeCartService.createStoreCart(reqVO);
- // 断言
- assertNotNull(storeCartId);
- // 校验记录的属性是否正确
- StoreCartDO storeCart = storeCartMapper.selectById(storeCartId);
- assertPojoEquals(reqVO, storeCart);
- }
-
- @Test
- public void testUpdateStoreCart_success() {
- // mock 数据
- StoreCartDO dbStoreCart = randomPojo(StoreCartDO.class);
- storeCartMapper.insert(dbStoreCart);// @Sql: 先插入出一条存在的数据
- // 准备参数
- StoreCartUpdateReqVO reqVO = randomPojo(StoreCartUpdateReqVO.class, o -> {
- o.setId(dbStoreCart.getId()); // 设置更新的 ID
- });
-
- // 调用
- storeCartService.updateStoreCart(reqVO);
- // 校验是否更新正确
- StoreCartDO storeCart = storeCartMapper.selectById(reqVO.getId()); // 获取最新的
- assertPojoEquals(reqVO, storeCart);
- }
-
- @Test
- public void testUpdateStoreCart_notExists() {
- // 准备参数
- StoreCartUpdateReqVO reqVO = randomPojo(StoreCartUpdateReqVO.class);
-
- // 调用, 并断言异常
- assertServiceException(() -> storeCartService.updateStoreCart(reqVO), STORE_CART_NOT_EXISTS);
- }
-
- @Test
- public void testDeleteStoreCart_success() {
- // mock 数据
- StoreCartDO dbStoreCart = randomPojo(StoreCartDO.class);
- storeCartMapper.insert(dbStoreCart);// @Sql: 先插入出一条存在的数据
- // 准备参数
- Long id = dbStoreCart.getId();
-
- // 调用
- storeCartService.deleteStoreCart(id);
- // 校验数据不存在了
- assertNull(storeCartMapper.selectById(id));
- }
-
- @Test
- public void testDeleteStoreCart_notExists() {
- // 准备参数
- Long id = randomLongId();
-
- // 调用, 并断言异常
- assertServiceException(() -> storeCartService.deleteStoreCart(id), STORE_CART_NOT_EXISTS);
- }
-
- @Test
- @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
- public void testGetStoreCartPage() {
- // mock 数据
- StoreCartDO dbStoreCart = randomPojo(StoreCartDO.class, o -> { // 等会查询到
- o.setUid(null);
- o.setType(null);
- o.setProductId(null);
- o.setProductAttrUnique(null);
- o.setCartNum(null);
- o.setIsPay(null);
- o.setIsNew(null);
- o.setCombinationId(null);
- o.setSeckillId(null);
- o.setBargainId(null);
- o.setCreateTime(null);
- });
- storeCartMapper.insert(dbStoreCart);
- // 测试 uid 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setUid(null)));
- // 测试 type 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setType(null)));
- // 测试 productId 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setProductId(null)));
- // 测试 productAttrUnique 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setProductAttrUnique(null)));
- // 测试 cartNum 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setCartNum(null)));
- // 测试 isPay 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setIsPay(null)));
- // 测试 isNew 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setIsNew(null)));
- // 测试 combinationId 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setCombinationId(null)));
- // 测试 seckillId 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setSeckillId(null)));
- // 测试 bargainId 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setBargainId(null)));
- // 测试 createTime 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setCreateTime(null)));
- // 准备参数
- StoreCartPageReqVO reqVO = new StoreCartPageReqVO();
- reqVO.setUid(null);
- reqVO.setType(null);
- reqVO.setProductId(null);
- reqVO.setProductAttrUnique(null);
- reqVO.setCartNum(null);
- reqVO.setIsPay(null);
- reqVO.setIsNew(null);
- reqVO.setCombinationId(null);
- reqVO.setSeckillId(null);
- reqVO.setBargainId(null);
- reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
-
- // 调用
- PageResult pageResult = storeCartService.getStoreCartPage(reqVO);
- // 断言
- assertEquals(1, pageResult.getTotal());
- assertEquals(1, pageResult.getList().size());
- assertPojoEquals(dbStoreCart, pageResult.getList().get(0));
- }
-
- @Test
- @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
- public void testGetStoreCartList() {
- // mock 数据
- StoreCartDO dbStoreCart = randomPojo(StoreCartDO.class, o -> { // 等会查询到
- o.setUid(null);
- o.setType(null);
- o.setProductId(null);
- o.setProductAttrUnique(null);
- o.setCartNum(null);
- o.setIsPay(null);
- o.setIsNew(null);
- o.setCombinationId(null);
- o.setSeckillId(null);
- o.setBargainId(null);
- o.setCreateTime(null);
- });
- storeCartMapper.insert(dbStoreCart);
- // 测试 uid 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setUid(null)));
- // 测试 type 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setType(null)));
- // 测试 productId 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setProductId(null)));
- // 测试 productAttrUnique 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setProductAttrUnique(null)));
- // 测试 cartNum 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setCartNum(null)));
- // 测试 isPay 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setIsPay(null)));
- // 测试 isNew 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setIsNew(null)));
- // 测试 combinationId 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setCombinationId(null)));
- // 测试 seckillId 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setSeckillId(null)));
- // 测试 bargainId 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setBargainId(null)));
- // 测试 createTime 不匹配
- storeCartMapper.insert(cloneIgnoreId(dbStoreCart, o -> o.setCreateTime(null)));
- // 准备参数
- StoreCartExportReqVO reqVO = new StoreCartExportReqVO();
- reqVO.setUid(null);
- reqVO.setType(null);
- reqVO.setProductId(null);
- reqVO.setProductAttrUnique(null);
- reqVO.setCartNum(null);
- reqVO.setIsPay(null);
- reqVO.setIsNew(null);
- reqVO.setCombinationId(null);
- reqVO.setSeckillId(null);
- reqVO.setBargainId(null);
- reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
-
- // 调用
- List list = storeCartService.getStoreCartList(reqVO);
- // 断言
- assertEquals(1, list.size());
- assertPojoEquals(dbStoreCart, list.get(0));
- }
-
-}
diff --git a/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/AdminAfterOrderStatusEnum.java b/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/AdminAfterOrderStatusEnum.java
new file mode 100644
index 0000000..97cb59f
--- /dev/null
+++ b/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/AdminAfterOrderStatusEnum.java
@@ -0,0 +1,38 @@
+/**
+ * Copyright (C) 2018-2022
+ * All rights reserved, Designed By www.yixiang.co
+
+ */
+package co.yixiang.yshop.module.order.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.stream.Stream;
+
+/**
+ * @author hupeng
+ * 后台订单相关枚举
+ */
+@Getter
+@AllArgsConstructor
+public enum AdminAfterOrderStatusEnum {
+
+ STATUS_1(1,"售后中"),
+ STATUS_2(2,"已完成");
+
+
+
+
+ private Integer value;
+ private String desc;
+
+ public static AdminAfterOrderStatusEnum toType(int value) {
+ return Stream.of(AdminAfterOrderStatusEnum.values())
+ .filter(p -> p.value == value)
+ .findAny()
+ .orElse(null);
+ }
+
+
+}
diff --git a/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/AdminOrderStatusEnum.java b/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/AdminOrderStatusEnum.java
new file mode 100644
index 0000000..08285e8
--- /dev/null
+++ b/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/AdminOrderStatusEnum.java
@@ -0,0 +1,43 @@
+/**
+ * Copyright (C) 2018-2022
+ * All rights reserved, Designed By www.yixiang.co
+
+ */
+package co.yixiang.yshop.module.order.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.stream.Stream;
+
+/**
+ * @author hupeng
+ * 后台订单相关枚举
+ */
+@Getter
+@AllArgsConstructor
+public enum AdminOrderStatusEnum {
+
+ STATUS_0(0,"未支付"),
+ STATUS_1(1,"未发货"),
+ STATUS_2(2,"待收货"),
+ STATUS_3(3,"待评价"),
+ STATUS_4(4,"交易完成"),
+ STATUS_5(5,"已退款"),
+ STATUS_6(6,"已删除");
+
+
+
+
+ private Integer value;
+ private String desc;
+
+ public static AdminOrderStatusEnum toType(int value) {
+ return Stream.of(AdminOrderStatusEnum.values())
+ .filter(p -> p.value == value)
+ .findAny()
+ .orElse(null);
+ }
+
+
+}
diff --git a/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/AfterTypeEnum.java b/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/AfterTypeEnum.java
new file mode 100644
index 0000000..e95ef82
--- /dev/null
+++ b/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/AfterTypeEnum.java
@@ -0,0 +1,21 @@
+package co.yixiang.yshop.module.order.enums;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author hupeng
+ * 售后类型枚举
+ */
+@Getter
+@AllArgsConstructor
+public enum AfterTypeEnum {
+ TYPE_1(1,"同意"),
+ TYPE_2(2,"拒绝"),
+ SERVICE_TYPE_0(0,"仅退款"),
+ SERVICE_TYPE_1(1,"退货退款");
+
+ private Integer value;
+ private String desc;
+}
diff --git a/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/ErrorCodeConstants.java b/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/ErrorCodeConstants.java
index a32adf4..e2904f4 100644
--- a/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/ErrorCodeConstants.java
+++ b/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/ErrorCodeConstants.java
@@ -26,6 +26,12 @@ public interface ErrorCodeConstants {
ErrorCode ORDER_REFUND_NOT = new ErrorCode(1008007017, "订单状态不能售后");
ErrorCode ORDER_NOT_REVOKE = new ErrorCode(1008007016, "订单不能撤销");
ErrorCode ORDER_NOT_CANCEL = new ErrorCode(1008007018, "订单不能取消");
+ ErrorCode ORDER_ADDRESS_REQUERED = new ErrorCode(1008007019, "请输入商家收货人信息");
+ // ========== 订单电子面单记录 ==========
+ ErrorCode STORE_ORDER_ELECTRONICS_NOT_EXISTS = new ErrorCode(1008010000, "订单电子面单记录不存在");
+
+
+
}
diff --git a/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/OrderLogEnum.java b/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/OrderLogEnum.java
index 9d67586..5ae53cd 100644
--- a/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/OrderLogEnum.java
+++ b/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/OrderLogEnum.java
@@ -27,6 +27,7 @@ public enum OrderLogEnum {
CREATE_ORDER("yshop_create_order","订单生成"),
NONE_ORDER("NONE","订单OK"),
DELIVERY_GOODS("delivery_goods", "订单发货"),
+ OFFLINE_PAY("offline_pay", "线下支付"),
EXTEND_ORDER("EXTEND_ORDER","订单已生成");
diff --git a/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/UpdateOrderEnum.java b/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/UpdateOrderEnum.java
new file mode 100644
index 0000000..099daec
--- /dev/null
+++ b/yshop-module-mall/yshop-module-order-api/src/main/java/co/yixiang/yshop/module/order/enums/UpdateOrderEnum.java
@@ -0,0 +1,29 @@
+/**
+ * Copyright (C) 2018-2022
+ * All rights reserved, Designed By www.yixiang.co
+
+ */
+package co.yixiang.yshop.module.order.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author hupeng
+ * 应用来源相关枚举
+ */
+@Getter
+@AllArgsConstructor
+public enum UpdateOrderEnum {
+
+ UPDATE_ORDER("updateOrder","修改订单"),
+ ORDER_SEND("orderSend","订单发货"),
+ RMARK("remark","备注"),
+ SEND_INFO("sendInfo","配送信息");
+
+
+ private String value;
+ private String desc;
+
+
+}
diff --git a/yshop-module-mall/yshop-module-order-biz/pom.xml b/yshop-module-mall/yshop-module-order-biz/pom.xml
index a3fee2d..41ff313 100644
--- a/yshop-module-mall/yshop-module-order-biz/pom.xml
+++ b/yshop-module-mall/yshop-module-order-biz/pom.xml
@@ -29,9 +29,20 @@
co.yixiang.boot
- yshop-module-member-biz
+ yshop-module-pay-api
${revision}
+
+ co.yixiang.boot
+ yshop-module-express-biz
+ ${revision}
+
+
+ co.yixiang.boot
+ yshop-module-message-biz
+ ${revision}
+
+
@@ -66,6 +77,12 @@
co.yixiang.boot
yshop-spring-boot-starter-excel
+
+
+
+ co.yixiang.boot
+ yshop-spring-boot-starter-job
+
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/StoreAfterSalesController.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/StoreAfterSalesController.java
index b6edbd5..f45f618 100644
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/StoreAfterSalesController.java
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/StoreAfterSalesController.java
@@ -1,32 +1,24 @@
package co.yixiang.yshop.module.order.controller.admin.storeaftersales;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Operation;
-
-import javax.validation.constraints.*;
-import javax.validation.*;
-import javax.servlet.http.*;
-import java.util.*;
-import java.io.IOException;
-
-import co.yixiang.yshop.framework.common.pojo.PageResult;
import co.yixiang.yshop.framework.common.pojo.CommonResult;
-import static co.yixiang.yshop.framework.common.pojo.CommonResult.success;
-
-import co.yixiang.yshop.framework.excel.core.util.ExcelUtils;
-
-import co.yixiang.yshop.framework.operatelog.core.annotations.OperateLog;
-import static co.yixiang.yshop.framework.operatelog.core.enums.OperateTypeEnum.*;
-
-import co.yixiang.yshop.module.order.controller.admin.storeaftersales.vo.*;
-import co.yixiang.yshop.module.order.dal.dataobject.storeaftersales.StoreAfterSalesDO;
+import co.yixiang.yshop.framework.common.pojo.PageResult;
+import co.yixiang.yshop.module.order.controller.admin.storeaftersales.vo.StoreAfterSalesPageReqVO;
+import co.yixiang.yshop.module.order.controller.admin.storeaftersales.vo.StoreAfterSalesRespVO;
+import co.yixiang.yshop.module.order.controller.admin.storeaftersales.vo.StoreAfterSalesUpdateReqVO;
import co.yixiang.yshop.module.order.convert.storeaftersales.StoreAfterSalesConvert;
+import co.yixiang.yshop.module.order.dal.dataobject.storeaftersales.StoreAfterSalesDO;
import co.yixiang.yshop.module.order.service.storeaftersales.StoreAfterSalesService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+import static co.yixiang.yshop.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 售后记录")
@RestController
@@ -37,12 +29,6 @@ public class StoreAfterSalesController {
@Resource
private StoreAfterSalesService storeAfterSalesService;
- @PostMapping("/create")
- @Operation(summary = "创建售后记录")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales:create')")
- public CommonResult createStoreAfterSales(@Valid @RequestBody StoreAfterSalesCreateReqVO createReqVO) {
- return success(storeAfterSalesService.createStoreAfterSales(createReqVO));
- }
@PutMapping("/update")
@Operation(summary = "更新售后记录")
@@ -52,12 +38,13 @@ public class StoreAfterSalesController {
return success(true);
}
- @DeleteMapping("/delete")
- @Operation(summary = "删除售后记录")
+
+ @GetMapping("/pay")
+ @Operation(summary = "立即退款")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('order:store-after-sales:delete')")
public CommonResult deleteStoreAfterSales(@RequestParam("id") Long id) {
- storeAfterSalesService.deleteStoreAfterSales(id);
+ storeAfterSalesService.payStoreAfterSales(id);
return success(true);
}
@@ -70,33 +57,13 @@ public class StoreAfterSalesController {
return success(StoreAfterSalesConvert.INSTANCE.convert(storeAfterSales));
}
- @GetMapping("/list")
- @Operation(summary = "获得售后记录列表")
- @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales:query')")
- public CommonResult> getStoreAfterSalesList(@RequestParam("ids") Collection ids) {
- List list = storeAfterSalesService.getStoreAfterSalesList(ids);
- return success(StoreAfterSalesConvert.INSTANCE.convertList(list));
- }
@GetMapping("/page")
@Operation(summary = "获得售后记录分页")
@PreAuthorize("@ss.hasPermission('order:store-after-sales:query')")
public CommonResult> getStoreAfterSalesPage(@Valid StoreAfterSalesPageReqVO pageVO) {
- PageResult pageResult = storeAfterSalesService.getStoreAfterSalesPage(pageVO);
- return success(StoreAfterSalesConvert.INSTANCE.convertPage(pageResult));
+ return success(storeAfterSalesService.getStoreAfterSalesPage(pageVO));
}
- @GetMapping("/export-excel")
- @Operation(summary = "导出售后记录 Excel")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales:export')")
- @OperateLog(type = EXPORT)
- public void exportStoreAfterSalesExcel(@Valid StoreAfterSalesExportReqVO exportReqVO,
- HttpServletResponse response) throws IOException {
- List list = storeAfterSalesService.getStoreAfterSalesList(exportReqVO);
- // 导出 Excel
- List datas = StoreAfterSalesConvert.INSTANCE.convertList02(list);
- ExcelUtils.write(response, "售后记录.xls", "数据", StoreAfterSalesExcelVO.class, datas);
- }
}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesCreateReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesCreateReqVO.java
deleted file mode 100644
index 4e08254..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesCreateReqVO.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersales.vo;
-
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import javax.validation.constraints.*;
-
-@Schema(description = "管理后台 - 售后记录创建 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class StoreAfterSalesCreateReqVO extends StoreAfterSalesBaseVO {
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesExcelVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesExcelVO.java
deleted file mode 100644
index dbd026d..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesExcelVO.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersales.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-
-/**
- * 售后记录 Excel VO
- *
- * @author yshop
- */
-@Data
-public class StoreAfterSalesExcelVO {
-
- @ExcelProperty("id")
- private Long id;
-
- @ExcelProperty("订单号")
- private String orderCode;
-
- @ExcelProperty("退款金额")
- private BigDecimal refundAmount;
-
- @ExcelProperty("服务类型0仅退款1退货退款")
- private Integer serviceType;
-
- @ExcelProperty("申请原因")
- private String reasons;
-
- @ExcelProperty("说明")
- private String explains;
-
- @ExcelProperty("说明图片->多个用逗号分割")
- private String explainImg;
-
- @ExcelProperty("物流公司编码")
- private String shipperCode;
-
- @ExcelProperty("物流单号")
- private String deliverySn;
-
- @ExcelProperty("物流名称")
- private String deliveryName;
-
- @ExcelProperty("状态 0已提交等待平台审核 1平台已审核 等待用户发货/退款 2 用户已发货 3退款成功")
- private Integer state;
-
- @ExcelProperty("售后状态-0正常1用户取消2商家拒绝")
- private Integer salesState;
-
- @ExcelProperty("添加时间")
- private LocalDateTime createTime;
-
- @ExcelProperty("用户id")
- private Long userId;
-
- @ExcelProperty("商家收货人")
- private String consignee;
-
- @ExcelProperty("商家手机号")
- private String phoneNumber;
-
- @ExcelProperty("商家地址")
- private String address;
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesExportReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesExportReqVO.java
deleted file mode 100644
index 633821c..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesExportReqVO.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersales.vo;
-
-import lombok.*;
-
-import java.math.BigDecimal;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import co.yixiang.yshop.framework.common.pojo.PageParam;
-import java.time.LocalDateTime;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import static co.yixiang.yshop.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - 售后记录 Excel 导出 Request VO,参数和 StoreAfterSalesPageReqVO 是一致的")
-@Data
-public class StoreAfterSalesExportReqVO {
-
- @Schema(description = "订单号")
- private String orderCode;
-
- @Schema(description = "退款金额")
- private BigDecimal refundAmount;
-
- @Schema(description = "服务类型0仅退款1退货退款", example = "2")
- private Boolean serviceType;
-
- @Schema(description = "申请原因")
- private String reasons;
-
- @Schema(description = "说明")
- private String explains;
-
- @Schema(description = "说明图片->多个用逗号分割")
- private String explainImg;
-
- @Schema(description = "物流公司编码")
- private String shipperCode;
-
- @Schema(description = "物流单号")
- private String deliverySn;
-
- @Schema(description = "物流名称", example = "yshop")
- private String deliveryName;
-
- @Schema(description = "状态 0已提交等待平台审核 1平台已审核 等待用户发货/退款 2 用户已发货 3退款成功")
- private Boolean state;
-
- @Schema(description = "售后状态-0正常1用户取消2商家拒绝")
- private Boolean salesState;
-
- @Schema(description = "添加时间")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private LocalDateTime[] createTime;
-
- @Schema(description = "用户id", example = "24467")
- private Long userId;
-
- @Schema(description = "商家收货人")
- private String consignee;
-
- @Schema(description = "商家手机号")
- private String phoneNumber;
-
- @Schema(description = "商家地址")
- private String address;
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesPageReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesPageReqVO.java
index 42d34e5..59fd267 100644
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesPageReqVO.java
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesPageReqVO.java
@@ -20,50 +20,7 @@ public class StoreAfterSalesPageReqVO extends PageParam {
@Schema(description = "订单号")
private String orderCode;
- @Schema(description = "退款金额")
- private BigDecimal refundAmount;
-
- @Schema(description = "服务类型0仅退款1退货退款", example = "2")
- private Boolean serviceType;
-
- @Schema(description = "申请原因")
- private String reasons;
-
- @Schema(description = "说明")
- private String explains;
-
- @Schema(description = "说明图片->多个用逗号分割")
- private String explainImg;
-
- @Schema(description = "物流公司编码")
- private String shipperCode;
-
- @Schema(description = "物流单号")
- private String deliverySn;
-
- @Schema(description = "物流名称", example = "yshop")
- private String deliveryName;
-
- @Schema(description = "状态 0已提交等待平台审核 1平台已审核 等待用户发货/退款 2 用户已发货 3退款成功")
- private Boolean state;
-
- @Schema(description = "售后状态-0正常1用户取消2商家拒绝")
- private Boolean salesState;
-
- @Schema(description = "添加时间")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private LocalDateTime[] createTime;
-
- @Schema(description = "用户id", example = "24467")
- private Long userId;
-
- @Schema(description = "商家收货人")
- private String consignee;
-
- @Schema(description = "商家手机号")
- private String phoneNumber;
-
- @Schema(description = "商家地址")
- private String address;
+ @Schema(description = "类型")
+ private Integer type;
}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesRespVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesRespVO.java
index 55de1c4..a9de74a 100644
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesRespVO.java
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesRespVO.java
@@ -1,8 +1,12 @@
package co.yixiang.yshop.module.order.controller.admin.storeaftersales.vo;
+import co.yixiang.yshop.module.member.controller.admin.user.vo.UserRespVO;
+import co.yixiang.yshop.module.order.dal.dataobject.storeaftersalesitem.StoreAfterSalesItemDO;
+import co.yixiang.yshop.module.order.dal.dataobject.storeordercartinfo.StoreOrderCartInfoDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
+import java.util.List;
@Schema(description = "管理后台 - 售后记录 Response VO")
@Data
@@ -16,4 +20,10 @@ public class StoreAfterSalesRespVO extends StoreAfterSalesBaseVO {
@Schema(description = "添加时间")
private LocalDateTime createTime;
+ @Schema(description = "用户信息", required = true)
+ private UserRespVO userRespVO;
+
+ @Schema(description = "商品信息", required = true)
+ private List storeOrderCartInfoDOList;
+
}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesUpdateReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesUpdateReqVO.java
index 336a6bb..35b7b40 100644
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesUpdateReqVO.java
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersales/vo/StoreAfterSalesUpdateReqVO.java
@@ -15,4 +15,7 @@ public class StoreAfterSalesUpdateReqVO extends StoreAfterSalesBaseVO {
@NotNull(message = "id不能为空")
private Long id;
+ @Schema(description = "审核类型", required = true, example = "1-同意 2-拒绝")
+ private Integer type;
+
}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/StoreAfterSalesItemController.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/StoreAfterSalesItemController.java
deleted file mode 100644
index d6bfe8f..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/StoreAfterSalesItemController.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesitem;
-
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Operation;
-
-import javax.validation.constraints.*;
-import javax.validation.*;
-import javax.servlet.http.*;
-import java.util.*;
-import java.io.IOException;
-
-import co.yixiang.yshop.framework.common.pojo.PageResult;
-import co.yixiang.yshop.framework.common.pojo.CommonResult;
-import static co.yixiang.yshop.framework.common.pojo.CommonResult.success;
-
-import co.yixiang.yshop.framework.excel.core.util.ExcelUtils;
-
-import co.yixiang.yshop.framework.operatelog.core.annotations.OperateLog;
-import static co.yixiang.yshop.framework.operatelog.core.enums.OperateTypeEnum.*;
-
-import co.yixiang.yshop.module.order.controller.admin.storeaftersalesitem.vo.*;
-import co.yixiang.yshop.module.order.dal.dataobject.storeaftersalesitem.StoreAfterSalesItemDO;
-import co.yixiang.yshop.module.order.convert.storeaftersalesitem.StoreAfterSalesItemConvert;
-import co.yixiang.yshop.module.order.service.storeaftersalesitem.StoreAfterSalesItemService;
-
-@Tag(name = "管理后台 - 售后子")
-@RestController
-@RequestMapping("/order/store-after-sales-item")
-@Validated
-public class StoreAfterSalesItemController {
-
- @Resource
- private StoreAfterSalesItemService storeAfterSalesItemService;
-
- @PostMapping("/create")
- @Operation(summary = "创建售后子")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-item:create')")
- public CommonResult createStoreAfterSalesItem(@Valid @RequestBody StoreAfterSalesItemCreateReqVO createReqVO) {
- return success(storeAfterSalesItemService.createStoreAfterSalesItem(createReqVO));
- }
-
- @PutMapping("/update")
- @Operation(summary = "更新售后子")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-item:update')")
- public CommonResult updateStoreAfterSalesItem(@Valid @RequestBody StoreAfterSalesItemUpdateReqVO updateReqVO) {
- storeAfterSalesItemService.updateStoreAfterSalesItem(updateReqVO);
- return success(true);
- }
-
- @DeleteMapping("/delete")
- @Operation(summary = "删除售后子")
- @Parameter(name = "id", description = "编号", required = true)
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-item:delete')")
- public CommonResult deleteStoreAfterSalesItem(@RequestParam("id") Long id) {
- storeAfterSalesItemService.deleteStoreAfterSalesItem(id);
- return success(true);
- }
-
- @GetMapping("/get")
- @Operation(summary = "获得售后子")
- @Parameter(name = "id", description = "编号", required = true, example = "1024")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-item:query')")
- public CommonResult getStoreAfterSalesItem(@RequestParam("id") Long id) {
- StoreAfterSalesItemDO storeAfterSalesItem = storeAfterSalesItemService.getStoreAfterSalesItem(id);
- return success(StoreAfterSalesItemConvert.INSTANCE.convert(storeAfterSalesItem));
- }
-
- @GetMapping("/list")
- @Operation(summary = "获得售后子列表")
- @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-item:query')")
- public CommonResult> getStoreAfterSalesItemList(@RequestParam("ids") Collection ids) {
- List list = storeAfterSalesItemService.getStoreAfterSalesItemList(ids);
- return success(StoreAfterSalesItemConvert.INSTANCE.convertList(list));
- }
-
- @GetMapping("/page")
- @Operation(summary = "获得售后子分页")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-item:query')")
- public CommonResult> getStoreAfterSalesItemPage(@Valid StoreAfterSalesItemPageReqVO pageVO) {
- PageResult pageResult = storeAfterSalesItemService.getStoreAfterSalesItemPage(pageVO);
- return success(StoreAfterSalesItemConvert.INSTANCE.convertPage(pageResult));
- }
-
- @GetMapping("/export-excel")
- @Operation(summary = "导出售后子 Excel")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-item:export')")
- @OperateLog(type = EXPORT)
- public void exportStoreAfterSalesItemExcel(@Valid StoreAfterSalesItemExportReqVO exportReqVO,
- HttpServletResponse response) throws IOException {
- List list = storeAfterSalesItemService.getStoreAfterSalesItemList(exportReqVO);
- // 导出 Excel
- List datas = StoreAfterSalesItemConvert.INSTANCE.convertList02(list);
- ExcelUtils.write(response, "售后子.xls", "数据", StoreAfterSalesItemExcelVO.class, datas);
- }
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemBaseVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemBaseVO.java
deleted file mode 100644
index 52fb2ea..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemBaseVO.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesitem.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import javax.validation.constraints.*;
-
-/**
-* 售后子 Base VO,提供给添加、修改、详细的子 VO 使用
-* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
-*/
-@Data
-public class StoreAfterSalesItemBaseVO {
-
- @Schema(description = "售后id", example = "12309")
- private Long storeAfterSalesId;
-
- @Schema(description = "商品id", example = "27833")
- private Long productId;
-
- @Schema(description = "退货东西的详情信息", required = true)
- @NotNull(message = "退货东西的详情信息不能为空")
- private String cartInfo;
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemCreateReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemCreateReqVO.java
deleted file mode 100644
index 7a0aaf9..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemCreateReqVO.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesitem.vo;
-
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import javax.validation.constraints.*;
-
-@Schema(description = "管理后台 - 售后子创建 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class StoreAfterSalesItemCreateReqVO extends StoreAfterSalesItemBaseVO {
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemExcelVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemExcelVO.java
deleted file mode 100644
index 7319ce4..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemExcelVO.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesitem.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-
-/**
- * 售后子 Excel VO
- *
- * @author yshop
- */
-@Data
-public class StoreAfterSalesItemExcelVO {
-
- @ExcelProperty("主键id")
- private Long id;
-
- @ExcelProperty("售后id")
- private Long storeAfterSalesId;
-
- @ExcelProperty("商品id")
- private Long productId;
-
- @ExcelProperty("退货东西的详情信息")
- private String cartInfo;
-
- @ExcelProperty("添加时间")
- private LocalDateTime createTime;
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemExportReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemExportReqVO.java
deleted file mode 100644
index f8909db..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemExportReqVO.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesitem.vo;
-
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import co.yixiang.yshop.framework.common.pojo.PageParam;
-import java.time.LocalDateTime;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import static co.yixiang.yshop.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - 售后子 Excel 导出 Request VO,参数和 StoreAfterSalesItemPageReqVO 是一致的")
-@Data
-public class StoreAfterSalesItemExportReqVO {
-
- @Schema(description = "售后id", example = "12309")
- private Long storeAfterSalesId;
-
- @Schema(description = "商品id", example = "27833")
- private Long productId;
-
- @Schema(description = "退货东西的详情信息")
- private String cartInfo;
-
- @Schema(description = "添加时间")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private LocalDateTime[] createTime;
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemPageReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemPageReqVO.java
deleted file mode 100644
index 2980621..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesitem/vo/StoreAfterSalesItemPageReqVO.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesitem.vo;
-
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import co.yixiang.yshop.framework.common.pojo.PageParam;
-import org.springframework.format.annotation.DateTimeFormat;
-import java.time.LocalDateTime;
-
-import static co.yixiang.yshop.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - 售后子分页 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class StoreAfterSalesItemPageReqVO extends PageParam {
-
- @Schema(description = "售后id", example = "12309")
- private Long storeAfterSalesId;
-
- @Schema(description = "商品id", example = "27833")
- private Long productId;
-
- @Schema(description = "退货东西的详情信息")
- private String cartInfo;
-
- @Schema(description = "添加时间")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private LocalDateTime[] createTime;
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/StoreAfterSalesStatusController.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/StoreAfterSalesStatusController.java
deleted file mode 100644
index 3df6fb8..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/StoreAfterSalesStatusController.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesstatus;
-
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Operation;
-
-import javax.validation.constraints.*;
-import javax.validation.*;
-import javax.servlet.http.*;
-import java.util.*;
-import java.io.IOException;
-
-import co.yixiang.yshop.framework.common.pojo.PageResult;
-import co.yixiang.yshop.framework.common.pojo.CommonResult;
-import static co.yixiang.yshop.framework.common.pojo.CommonResult.success;
-
-import co.yixiang.yshop.framework.excel.core.util.ExcelUtils;
-
-import co.yixiang.yshop.framework.operatelog.core.annotations.OperateLog;
-import static co.yixiang.yshop.framework.operatelog.core.enums.OperateTypeEnum.*;
-
-import co.yixiang.yshop.module.order.controller.admin.storeaftersalesstatus.vo.*;
-import co.yixiang.yshop.module.order.dal.dataobject.storeaftersalesstatus.StoreAfterSalesStatusDO;
-import co.yixiang.yshop.module.order.convert.storeaftersalesstatus.StoreAfterSalesStatusConvert;
-import co.yixiang.yshop.module.order.service.storeaftersalesstatus.StoreAfterSalesStatusService;
-
-@Tag(name = "管理后台 - 售后订单操作详情")
-@RestController
-@RequestMapping("/order/store-after-sales-status")
-@Validated
-public class StoreAfterSalesStatusController {
-
- @Resource
- private StoreAfterSalesStatusService storeAfterSalesStatusService;
-
- @PostMapping("/create")
- @Operation(summary = "创建售后订单操作详情")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-status:create')")
- public CommonResult createStoreAfterSalesStatus(@Valid @RequestBody StoreAfterSalesStatusCreateReqVO createReqVO) {
- return success(storeAfterSalesStatusService.createStoreAfterSalesStatus(createReqVO));
- }
-
- @PutMapping("/update")
- @Operation(summary = "更新售后订单操作详情")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-status:update')")
- public CommonResult updateStoreAfterSalesStatus(@Valid @RequestBody StoreAfterSalesStatusUpdateReqVO updateReqVO) {
- storeAfterSalesStatusService.updateStoreAfterSalesStatus(updateReqVO);
- return success(true);
- }
-
- @DeleteMapping("/delete")
- @Operation(summary = "删除售后订单操作详情")
- @Parameter(name = "id", description = "编号", required = true)
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-status:delete')")
- public CommonResult deleteStoreAfterSalesStatus(@RequestParam("id") Long id) {
- storeAfterSalesStatusService.deleteStoreAfterSalesStatus(id);
- return success(true);
- }
-
- @GetMapping("/get")
- @Operation(summary = "获得售后订单操作详情")
- @Parameter(name = "id", description = "编号", required = true, example = "1024")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-status:query')")
- public CommonResult getStoreAfterSalesStatus(@RequestParam("id") Long id) {
- StoreAfterSalesStatusDO storeAfterSalesStatus = storeAfterSalesStatusService.getStoreAfterSalesStatus(id);
- return success(StoreAfterSalesStatusConvert.INSTANCE.convert(storeAfterSalesStatus));
- }
-
- @GetMapping("/list")
- @Operation(summary = "获得售后订单操作详情列表")
- @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-status:query')")
- public CommonResult> getStoreAfterSalesStatusList(@RequestParam("ids") Collection ids) {
- List list = storeAfterSalesStatusService.getStoreAfterSalesStatusList(ids);
- return success(StoreAfterSalesStatusConvert.INSTANCE.convertList(list));
- }
-
- @GetMapping("/page")
- @Operation(summary = "获得售后订单操作详情分页")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-status:query')")
- public CommonResult> getStoreAfterSalesStatusPage(@Valid StoreAfterSalesStatusPageReqVO pageVO) {
- PageResult pageResult = storeAfterSalesStatusService.getStoreAfterSalesStatusPage(pageVO);
- return success(StoreAfterSalesStatusConvert.INSTANCE.convertPage(pageResult));
- }
-
- @GetMapping("/export-excel")
- @Operation(summary = "导出售后订单操作详情 Excel")
- @PreAuthorize("@ss.hasPermission('order:store-after-sales-status:export')")
- @OperateLog(type = EXPORT)
- public void exportStoreAfterSalesStatusExcel(@Valid StoreAfterSalesStatusExportReqVO exportReqVO,
- HttpServletResponse response) throws IOException {
- List list = storeAfterSalesStatusService.getStoreAfterSalesStatusList(exportReqVO);
- // 导出 Excel
- List datas = StoreAfterSalesStatusConvert.INSTANCE.convertList02(list);
- ExcelUtils.write(response, "售后订单操作详情.xls", "数据", StoreAfterSalesStatusExcelVO.class, datas);
- }
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusBaseVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusBaseVO.java
deleted file mode 100644
index c9c4e82..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusBaseVO.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesstatus.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-import javax.validation.constraints.*;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import static co.yixiang.yshop.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-/**
-* 售后订单操作详情 Base VO,提供给添加、修改、详细的子 VO 使用
-* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
-*/
-@Data
-public class StoreAfterSalesStatusBaseVO {
-
- @Schema(description = "售后id", example = "8825")
- private Long storeAfterSalesId;
-
- @Schema(description = "操作类型", example = "2")
- private Integer changeType;
-
- @Schema(description = "操作备注")
- private String changeMessage;
-
- @Schema(description = "操作时间")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private LocalDateTime changeTime;
-
- @Schema(description = "操作人")
- private String operator;
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusCreateReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusCreateReqVO.java
deleted file mode 100644
index 1ab9660..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusCreateReqVO.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesstatus.vo;
-
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import javax.validation.constraints.*;
-
-@Schema(description = "管理后台 - 售后订单操作详情创建 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class StoreAfterSalesStatusCreateReqVO extends StoreAfterSalesStatusBaseVO {
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusExcelVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusExcelVO.java
deleted file mode 100644
index d45077f..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusExcelVO.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesstatus.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-
-/**
- * 售后订单操作详情 Excel VO
- *
- * @author yshop
- */
-@Data
-public class StoreAfterSalesStatusExcelVO {
-
- @ExcelProperty("id")
- private Long id;
-
- @ExcelProperty("售后id")
- private Long storeAfterSalesId;
-
- @ExcelProperty("操作类型")
- private Integer changeType;
-
- @ExcelProperty("操作备注")
- private String changeMessage;
-
- @ExcelProperty("操作时间")
- private LocalDateTime changeTime;
-
- @ExcelProperty("操作人")
- private String operator;
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusExportReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusExportReqVO.java
deleted file mode 100644
index abb6719..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusExportReqVO.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesstatus.vo;
-
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import co.yixiang.yshop.framework.common.pojo.PageParam;
-import java.time.LocalDateTime;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import static co.yixiang.yshop.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - 售后订单操作详情 Excel 导出 Request VO,参数和 StoreAfterSalesStatusPageReqVO 是一致的")
-@Data
-public class StoreAfterSalesStatusExportReqVO {
-
- @Schema(description = "售后id", example = "8825")
- private Long storeAfterSalesId;
-
- @Schema(description = "操作类型", example = "2")
- private Boolean changeType;
-
- @Schema(description = "操作备注")
- private String changeMessage;
-
- @Schema(description = "操作时间")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private LocalDateTime[] changeTime;
-
- @Schema(description = "操作人")
- private String operator;
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusPageReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusPageReqVO.java
deleted file mode 100644
index 9ebaa33..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusPageReqVO.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesstatus.vo;
-
-import lombok.*;
-import java.util.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import co.yixiang.yshop.framework.common.pojo.PageParam;
-import org.springframework.format.annotation.DateTimeFormat;
-import java.time.LocalDateTime;
-
-import static co.yixiang.yshop.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - 售后订单操作详情分页 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class StoreAfterSalesStatusPageReqVO extends PageParam {
-
- @Schema(description = "售后id", example = "8825")
- private Long storeAfterSalesId;
-
- @Schema(description = "操作类型", example = "2")
- private Boolean changeType;
-
- @Schema(description = "操作备注")
- private String changeMessage;
-
- @Schema(description = "操作时间")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private LocalDateTime[] changeTime;
-
- @Schema(description = "操作人")
- private String operator;
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusRespVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusRespVO.java
deleted file mode 100644
index fd237b4..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusRespVO.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesstatus.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.time.LocalDateTime;
-
-@Schema(description = "管理后台 - 售后订单操作详情 Response VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class StoreAfterSalesStatusRespVO extends StoreAfterSalesStatusBaseVO {
-
- @Schema(description = "id", required = true, example = "23233")
- private Long id;
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusUpdateReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusUpdateReqVO.java
deleted file mode 100644
index 443943d..0000000
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeaftersalesstatus/vo/StoreAfterSalesStatusUpdateReqVO.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package co.yixiang.yshop.module.order.controller.admin.storeaftersalesstatus.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import javax.validation.constraints.*;
-
-@Schema(description = "管理后台 - 售后订单操作详情更新 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class StoreAfterSalesStatusUpdateReqVO extends StoreAfterSalesStatusBaseVO {
-
- @Schema(description = "id", required = true, example = "23233")
- @NotNull(message = "id不能为空")
- private Long id;
-
-}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/StoreOrderController.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/StoreOrderController.java
index a320b55..6c16e04 100644
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/StoreOrderController.java
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/StoreOrderController.java
@@ -1,32 +1,33 @@
package co.yixiang.yshop.module.order.controller.admin.storeorder;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Operation;
-
-import javax.validation.constraints.*;
-import javax.validation.*;
-import javax.servlet.http.*;
-import java.util.*;
-import java.io.IOException;
-
-import co.yixiang.yshop.framework.common.pojo.PageResult;
import co.yixiang.yshop.framework.common.pojo.CommonResult;
-import static co.yixiang.yshop.framework.common.pojo.CommonResult.success;
-
+import co.yixiang.yshop.framework.common.pojo.PageResult;
import co.yixiang.yshop.framework.excel.core.util.ExcelUtils;
-
import co.yixiang.yshop.framework.operatelog.core.annotations.OperateLog;
-import static co.yixiang.yshop.framework.operatelog.core.enums.OperateTypeEnum.*;
-
import co.yixiang.yshop.module.order.controller.admin.storeorder.vo.*;
-import co.yixiang.yshop.module.order.dal.dataobject.storeorder.StoreOrderDO;
import co.yixiang.yshop.module.order.convert.storeorder.StoreOrderConvert;
+import co.yixiang.yshop.module.order.dal.dataobject.storeorder.StoreOrderDO;
+import co.yixiang.yshop.module.order.dal.dataobject.storeorderstatus.StoreOrderStatusDO;
import co.yixiang.yshop.module.order.service.storeorder.StoreOrderService;
+import co.yixiang.yshop.module.order.service.storeorderstatus.StoreOrderStatusService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+
+import static co.yixiang.yshop.framework.common.pojo.CommonResult.success;
+import static co.yixiang.yshop.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 订单")
@RestController
@@ -36,6 +37,8 @@ public class StoreOrderController {
@Resource
private StoreOrderService storeOrderService;
+ @Resource
+ private StoreOrderStatusService storeOrderStatusService;
@PostMapping("/create")
@Operation(summary = "创建订单")
@@ -61,13 +64,30 @@ public class StoreOrderController {
return success(true);
}
+ @GetMapping("/pay")
+ @Operation(summary = "订单线下支付")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('order:store-order:delete')")
+ public CommonResult payStoreOrder(@RequestParam("id") Long id) {
+ storeOrderService.payStoreOrder(id);
+ return success(true);
+ }
+
+ @GetMapping("/take")
+ @Operation(summary = "确认收货")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('order:store-order:delete')")
+ public CommonResult takeStoreOrder(@RequestParam("id") Long id) {
+ storeOrderService.takeStoreOrder(id);
+ return success(true);
+ }
+
@GetMapping("/get")
@Operation(summary = "获得订单")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('order:store-order:query')")
public CommonResult getStoreOrder(@RequestParam("id") Long id) {
- StoreOrderDO storeOrder = storeOrderService.getStoreOrder(id);
- return success(StoreOrderConvert.INSTANCE.convert(storeOrder));
+ return success(storeOrderService.getStoreOrder(id));
}
@GetMapping("/list")
@@ -83,8 +103,17 @@ public class StoreOrderController {
@Operation(summary = "获得订单分页")
@PreAuthorize("@ss.hasPermission('order:store-order:query')")
public CommonResult> getStoreOrderPage(@Valid StoreOrderPageReqVO pageVO) {
- PageResult pageResult = storeOrderService.getStoreOrderPage(pageVO);
- return success(StoreOrderConvert.INSTANCE.convertPage(pageResult));
+ return success(storeOrderService.getStoreOrderPage(pageVO));
+ }
+
+ @GetMapping("/record-list")
+ @Operation(summary = "获得订单记录列表")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('order:store-order:query')")
+ public CommonResult> getStoreOrderRecordList(@RequestParam("id") Long id) {
+ List list = storeOrderStatusService.list(new LambdaQueryWrapper()
+ .eq(StoreOrderStatusDO::getOid,id));
+ return success(list);
}
@GetMapping("/export-excel")
@@ -99,4 +128,17 @@ public class StoreOrderController {
ExcelUtils.write(response, "订单.xls", "数据", StoreOrderExcelVO.class, datas);
}
+ @GetMapping("/printOrder")
+ @Operation(summary = "打印电子面单")
+ @Parameters({
+ @Parameter(name = "id", description = "订单编号", required = true, example = "1024"),
+ @Parameter(name = "electId", description = "电子面单id", example = "a")
+ })
+ @PreAuthorize("@ss.hasPermission('order:store-order:query')")
+ public CommonResult printOrder(@RequestParam("id") Long id,@RequestParam("electId") Long electId) {
+ return success(storeOrderService.printOrder(id,electId));
+ }
+
+
+
}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderBaseVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderBaseVO.java
index 840ce00..921ceda 100644
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderBaseVO.java
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderBaseVO.java
@@ -1,28 +1,13 @@
package co.yixiang.yshop.module.order.controller.admin.storeorder.vo;
import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-import java.util.*;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import javax.validation.constraints.*;
+import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
import static co.yixiang.yshop.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
@@ -213,4 +198,7 @@ public class StoreOrderBaseVO {
@Schema(description = "系统删除")
private Integer isSystemDel;
+ @Schema(description = "订单类型")
+ private String orderType;
+
}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderPageReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderPageReqVO.java
index 2ce08bb..3d004bb 100644
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderPageReqVO.java
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderPageReqVO.java
@@ -20,154 +20,20 @@ public class StoreOrderPageReqVO extends PageParam {
@Schema(description = "订单号", example = "20527")
private String orderId;
- @Schema(description = "额外订单号", example = "12452")
- private String extendOrderId;
-
- @Schema(description = "用户id", example = "8323")
- private Long uid;
-
@Schema(description = "用户姓名", example = "张三")
private String realName;
@Schema(description = "用户电话")
private String userPhone;
- @Schema(description = "详细地址")
- private String userAddress;
-
- @Schema(description = "购物车id", example = "23301")
- private String cartId;
-
- @Schema(description = "运费金额", example = "637")
- private BigDecimal freightPrice;
-
- @Schema(description = "订单商品总数")
- private Integer totalNum;
-
- @Schema(description = "订单总价", example = "31659")
- private BigDecimal totalPrice;
-
- @Schema(description = "邮费")
- private BigDecimal totalPostage;
-
- @Schema(description = "实际支付金额", example = "19682")
- private BigDecimal payPrice;
-
- @Schema(description = "支付邮费")
- private BigDecimal payPostage;
-
- @Schema(description = "抵扣金额", example = "16463")
- private BigDecimal deductionPrice;
-
- @Schema(description = "优惠券id", example = "3299")
- private Integer couponId;
-
- @Schema(description = "优惠券金额", example = "22157")
- private BigDecimal couponPrice;
-
- @Schema(description = "支付状态", example = "11728")
- private Integer paid;
-
- @Schema(description = "支付时间")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private LocalDateTime[] payTime;
-
- @Schema(description = "支付方式", example = "2")
- private String payType;
-
- @Schema(description = "订单状态(-1 : 申请退款 -2 : 退货成功 0:待发货;1:待收货;2:已收货;3:已完成;-1:已退款)", example = "1")
- private Integer status;
-
- @Schema(description = "0 未退款 1 申请中 2 已退款", example = "2")
- private Integer refundStatus;
-
- @Schema(description = "退款图片")
- private String refundReasonWapImg;
-
- @Schema(description = "退款用户说明")
- private String refundReasonWapExplain;
-
- @Schema(description = "退款时间")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private LocalDateTime[] refundReasonTime;
-
- @Schema(description = "前台退款原因")
- private String refundReasonWap;
-
- @Schema(description = "不退款的理由", example = "不喜欢")
- private String refundReason;
-
- @Schema(description = "退款金额", example = "7547")
- private BigDecimal refundPrice;
-
- @Schema(description = "快递公司编号")
- private String deliverySn;
-
- @Schema(description = "快递名称/送货人姓名", example = "张三")
- private String deliveryName;
-
- @Schema(description = "发货类型", example = "1")
- private String deliveryType;
-
- @Schema(description = "快递单号/手机号", example = "24798")
- private String deliveryId;
-
- @Schema(description = "消费赚取积分")
- private BigDecimal gainIntegral;
-
- @Schema(description = "使用积分")
- private BigDecimal useIntegral;
-
- @Schema(description = "实际支付积分")
- private BigDecimal payIntegral;
-
- @Schema(description = "给用户退了多少积分")
- private BigDecimal backIntegral;
-
- @Schema(description = "备注")
- private String mark;
-
- @Schema(description = "唯一id(md5加密)类似id")
- private String unique;
-
- @Schema(description = "管理员备注", example = "随便")
- private String remark;
-
- @Schema(description = "商户ID", example = "8499")
- private Integer merId;
-
- @Schema(description = "拼团产品id0一般产品", example = "3865")
- private Long combinationId;
-
- @Schema(description = "拼团id 0没有拼团", example = "8463")
- private Long pinkId;
-
- @Schema(description = "成本价")
- private BigDecimal cost;
-
- @Schema(description = "秒杀产品ID", example = "21525")
- private Long seckillId;
-
- @Schema(description = "砍价id", example = "5132")
- private Integer bargainId;
-
- @Schema(description = "核销码")
- private String verifyCode;
-
- @Schema(description = "门店id", example = "12064")
- private Integer storeId;
-
- @Schema(description = "配送方式 1=快递 ,2=门店自提", example = "2")
- private Integer shippingType;
-
- @Schema(description = "支付渠道(0微信公众号1微信小程序)")
- private Integer isChannel;
-
- @Schema(description = "系统删除")
- private Integer isSystemDel;
-
@Schema(description = "添加时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
+ @Schema(description = "订单状态搜索值")
+ private Integer orderStatus;
+
+ @Schema(description = "支付状态搜索值")
+ private String payStatus;
+
}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderRespVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderRespVO.java
index b4d73c7..3a8ed7a 100644
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderRespVO.java
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderRespVO.java
@@ -1,8 +1,11 @@
package co.yixiang.yshop.module.order.controller.admin.storeorder.vo;
+import co.yixiang.yshop.module.member.controller.admin.user.vo.UserRespVO;
+import co.yixiang.yshop.module.order.dal.dataobject.storeordercartinfo.StoreOrderCartInfoDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
+import java.util.List;
@Schema(description = "管理后台 - 订单 Response VO")
@Data
@@ -16,4 +19,15 @@ public class StoreOrderRespVO extends StoreOrderBaseVO {
@Schema(description = "添加时间", required = true)
private LocalDateTime createTime;
+ @Schema(description = "用户信息", required = true)
+ private UserRespVO userRespVO;
+
+ @Schema(description = "商品信息", required = true)
+ private List storeOrderCartInfoDOList;
+
+ @Schema(description = "订单状态", required = true)
+ private String StatusStr;
+
+
+
}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderUpdateReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderUpdateReqVO.java
index 05a07df..bb2e09a 100644
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderUpdateReqVO.java
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorder/vo/StoreOrderUpdateReqVO.java
@@ -15,4 +15,13 @@ public class StoreOrderUpdateReqVO extends StoreOrderBaseVO {
@NotNull(message = "订单ID不能为空")
private Long id;
+ /**
+ * updateOrder: '修改订单',
+ * orderSend: '订单发货',
+ * remark: '备注',
+ * sendInfo: '配送信息',
+ */
+ @Schema(description = "更新类型", required = true, example = "31716")
+ private String updateType;
+
}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/StoreOrderElectronicsController.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/StoreOrderElectronicsController.java
new file mode 100644
index 0000000..a48cae5
--- /dev/null
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/StoreOrderElectronicsController.java
@@ -0,0 +1,102 @@
+package co.yixiang.yshop.module.order.controller.admin.storeorderelectronics;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import co.yixiang.yshop.framework.common.pojo.PageResult;
+import co.yixiang.yshop.framework.common.pojo.CommonResult;
+import static co.yixiang.yshop.framework.common.pojo.CommonResult.success;
+
+import co.yixiang.yshop.framework.excel.core.util.ExcelUtils;
+
+import co.yixiang.yshop.framework.operatelog.core.annotations.OperateLog;
+import static co.yixiang.yshop.framework.operatelog.core.enums.OperateTypeEnum.*;
+
+import co.yixiang.yshop.module.order.controller.admin.storeorderelectronics.vo.*;
+import co.yixiang.yshop.module.order.dal.dataobject.storeorderelectronics.StoreOrderElectronicsDO;
+import co.yixiang.yshop.module.order.convert.storeorderelectronics.StoreOrderElectronicsConvert;
+import co.yixiang.yshop.module.order.service.storeorderelectronics.StoreOrderElectronicsService;
+
+@Tag(name = "管理后台 - 订单电子面单记录")
+@RestController
+@RequestMapping("/order/store-order-electronics")
+@Validated
+public class StoreOrderElectronicsController {
+
+ @Resource
+ private StoreOrderElectronicsService storeOrderElectronicsService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建订单电子面单记录")
+ @PreAuthorize("@ss.hasPermission('order:store-order-electronics:create')")
+ public CommonResult createStoreOrderElectronics(@Valid @RequestBody StoreOrderElectronicsCreateReqVO createReqVO) {
+ return success(storeOrderElectronicsService.createStoreOrderElectronics(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新订单电子面单记录")
+ @PreAuthorize("@ss.hasPermission('order:store-order-electronics:update')")
+ public CommonResult updateStoreOrderElectronics(@Valid @RequestBody StoreOrderElectronicsUpdateReqVO updateReqVO) {
+ storeOrderElectronicsService.updateStoreOrderElectronics(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除订单电子面单记录")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('order:store-order-electronics:delete')")
+ public CommonResult deleteStoreOrderElectronics(@RequestParam("id") Long id) {
+ storeOrderElectronicsService.deleteStoreOrderElectronics(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得订单电子面单记录")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('order:store-order-electronics:query')")
+ public CommonResult getStoreOrderElectronics(@RequestParam("id") Long id) {
+ StoreOrderElectronicsDO storeOrderElectronics = storeOrderElectronicsService.getStoreOrderElectronics(id);
+ return success(StoreOrderElectronicsConvert.INSTANCE.convert(storeOrderElectronics));
+ }
+
+ @GetMapping("/list")
+ @Operation(summary = "获得订单电子面单记录列表")
+ @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
+ @PreAuthorize("@ss.hasPermission('order:store-order-electronics:query')")
+ public CommonResult> getStoreOrderElectronicsList(@RequestParam("ids") Collection ids) {
+ List list = storeOrderElectronicsService.getStoreOrderElectronicsList(ids);
+ return success(StoreOrderElectronicsConvert.INSTANCE.convertList(list));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得订单电子面单记录分页")
+ @PreAuthorize("@ss.hasPermission('order:store-order-electronics:query')")
+ public CommonResult> getStoreOrderElectronicsPage(@Valid StoreOrderElectronicsPageReqVO pageVO) {
+ PageResult pageResult = storeOrderElectronicsService.getStoreOrderElectronicsPage(pageVO);
+ return success(StoreOrderElectronicsConvert.INSTANCE.convertPage(pageResult));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出订单电子面单记录 Excel")
+ @PreAuthorize("@ss.hasPermission('order:store-order-electronics:export')")
+ @OperateLog(type = EXPORT)
+ public void exportStoreOrderElectronicsExcel(@Valid StoreOrderElectronicsExportReqVO exportReqVO,
+ HttpServletResponse response) throws IOException {
+ List list = storeOrderElectronicsService.getStoreOrderElectronicsList(exportReqVO);
+ // 导出 Excel
+ List datas = StoreOrderElectronicsConvert.INSTANCE.convertList02(list);
+ ExcelUtils.write(response, "订单电子面单记录.xls", "数据", StoreOrderElectronicsExcelVO.class, datas);
+ }
+
+}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsBaseVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsBaseVO.java
new file mode 100644
index 0000000..10e1d0b
--- /dev/null
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsBaseVO.java
@@ -0,0 +1,42 @@
+package co.yixiang.yshop.module.order.controller.admin.storeorderelectronics.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import javax.validation.constraints.*;
+
+/**
+* 订单电子面单记录 Base VO,提供给添加、修改、详细的子 VO 使用
+* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
+*/
+@Data
+public class StoreOrderElectronicsBaseVO {
+
+ @Schema(description = "订单编号")
+ private String orderSn;
+
+ @Schema(description = "模板")
+ private String printTemplate;
+
+ @Schema(description = "物流单号")
+ private String logisticCode;
+
+ @Schema(description = "快递编号")
+ private String shipperCode;
+
+ @Schema(description = "接口返回的json")
+ private String order;
+
+ @Schema(description = "线下网点客户号", example = "王五")
+ private String customerName;
+
+ @Schema(description = "线下网点密码")
+ private String customerPwd;
+
+ @Schema(description = "状态:0=正常,1=已取消", example = "1")
+ private Integer status;
+
+}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsCreateReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsCreateReqVO.java
new file mode 100644
index 0000000..61ec974
--- /dev/null
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsCreateReqVO.java
@@ -0,0 +1,14 @@
+package co.yixiang.yshop.module.order.controller.admin.storeorderelectronics.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 订单电子面单记录创建 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class StoreOrderElectronicsCreateReqVO extends StoreOrderElectronicsBaseVO {
+
+}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsExcelVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsExcelVO.java
new file mode 100644
index 0000000..7634711
--- /dev/null
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsExcelVO.java
@@ -0,0 +1,50 @@
+package co.yixiang.yshop.module.order.controller.admin.storeorderelectronics.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+
+/**
+ * 订单电子面单记录 Excel VO
+ *
+ * @author yshop
+ */
+@Data
+public class StoreOrderElectronicsExcelVO {
+
+ @ExcelProperty("主键id")
+ private Long id;
+
+ @ExcelProperty("订单编号")
+ private String orderSn;
+
+ @ExcelProperty("模板")
+ private String printTemplate;
+
+ @ExcelProperty("物流单号")
+ private String logisticCode;
+
+ @ExcelProperty("快递编号")
+ private String shipperCode;
+
+ @ExcelProperty("接口返回的json")
+ private String order;
+
+ @ExcelProperty("线下网点客户号")
+ private String customerName;
+
+ @ExcelProperty("线下网点密码")
+ private String customerPwd;
+
+ @ExcelProperty("状态:0=正常,1=已取消")
+ private Integer status;
+
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsExportReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsExportReqVO.java
new file mode 100644
index 0000000..b3034f8
--- /dev/null
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsExportReqVO.java
@@ -0,0 +1,45 @@
+package co.yixiang.yshop.module.order.controller.admin.storeorderelectronics.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import co.yixiang.yshop.framework.common.pojo.PageParam;
+import java.time.LocalDateTime;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import static co.yixiang.yshop.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 订单电子面单记录 Excel 导出 Request VO,参数和 StoreOrderElectronicsPageReqVO 是一致的")
+@Data
+public class StoreOrderElectronicsExportReqVO {
+
+ @Schema(description = "订单编号")
+ private String orderSn;
+
+ @Schema(description = "模板")
+ private String printTemplate;
+
+
+ @Schema(description = "物流单号")
+ private String logisticCode;
+
+ @Schema(description = "快递编号")
+ private String shipperCode;
+
+ @Schema(description = "接口返回的json")
+ private String order;
+
+ @Schema(description = "线下网点客户号", example = "王五")
+ private String customerName;
+
+ @Schema(description = "线下网点密码")
+ private String customerPwd;
+
+ @Schema(description = "状态:0=正常,1=已取消", example = "1")
+ private Integer status;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsPageReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsPageReqVO.java
new file mode 100644
index 0000000..e303553
--- /dev/null
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsPageReqVO.java
@@ -0,0 +1,47 @@
+package co.yixiang.yshop.module.order.controller.admin.storeorderelectronics.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import co.yixiang.yshop.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static co.yixiang.yshop.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 订单电子面单记录分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class StoreOrderElectronicsPageReqVO extends PageParam {
+
+ @Schema(description = "订单编号")
+ private String orderSn;
+
+ @Schema(description = "模板")
+ private String printTemplate;
+
+
+ @Schema(description = "物流单号")
+ private String logisticCode;
+
+ @Schema(description = "快递编号")
+ private String shipperCode;
+
+ @Schema(description = "接口返回的json")
+ private String order;
+
+ @Schema(description = "线下网点客户号", example = "王五")
+ private String customerName;
+
+ @Schema(description = "线下网点密码")
+ private String customerPwd;
+
+ @Schema(description = "状态:0=正常,1=已取消", example = "1")
+ private Integer status;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsRespVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsRespVO.java
new file mode 100644
index 0000000..6bfddc0
--- /dev/null
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsRespVO.java
@@ -0,0 +1,19 @@
+package co.yixiang.yshop.module.order.controller.admin.storeorderelectronics.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 订单电子面单记录 Response VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class StoreOrderElectronicsRespVO extends StoreOrderElectronicsBaseVO {
+
+ @Schema(description = "主键id", required = true, example = "21777")
+ private Long id;
+
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsUpdateReqVO.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsUpdateReqVO.java
new file mode 100644
index 0000000..27a749b
--- /dev/null
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/admin/storeorderelectronics/vo/StoreOrderElectronicsUpdateReqVO.java
@@ -0,0 +1,18 @@
+package co.yixiang.yshop.module.order.controller.admin.storeorderelectronics.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 订单电子面单记录更新 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class StoreOrderElectronicsUpdateReqVO extends StoreOrderElectronicsBaseVO {
+
+ @Schema(description = "主键id", required = true, example = "21777")
+ @NotNull(message = "主键id不能为空")
+ private Long id;
+
+}
diff --git a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/app/order/AppOrderController.java b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/app/order/AppOrderController.java
index b62a38c..63e0db8 100644
--- a/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/app/order/AppOrderController.java
+++ b/yshop-module-mall/yshop-module-order-biz/src/main/java/co/yixiang/yshop/module/order/controller/app/order/AppOrderController.java
@@ -12,10 +12,15 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import co.yixiang.yshop.framework.common.pojo.CommonResult;
import co.yixiang.yshop.framework.security.core.annotations.PreAuthenticated;
+import co.yixiang.yshop.module.member.controller.app.user.vo.AppUserOrderCountVo;
import co.yixiang.yshop.module.order.controller.app.order.param.*;
import co.yixiang.yshop.module.order.controller.app.order.vo.AppConfirmOrderVo;
import co.yixiang.yshop.module.order.controller.app.order.vo.AppStoreOrderQueryVo;
+import co.yixiang.yshop.module.order.dal.redis.order.AsyncOrderRedisDAO;
import co.yixiang.yshop.module.order.service.storeorder.AppStoreOrderService;
+import co.yixiang.yshop.module.pay.mq.producer.PayNoticeProducer;
+import com.egzosn.pay.spring.boot.core.PayServiceManager;
+import com.egzosn.pay.web.support.HttpRequestNoticeParams;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
@@ -23,13 +28,13 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import static co.yixiang.yshop.framework.common.exception.util.ServiceExceptionUtil.exception;
import static co.yixiang.yshop.framework.common.pojo.CommonResult.success;
@@ -53,6 +58,21 @@ import static co.yixiang.yshop.module.order.enums.ErrorCodeConstants.STORE_ORDER
public class AppOrderController {
private final AppStoreOrderService appStoreOrderService;
+ private final AsyncOrderRedisDAO asyncOrderRedisDAO;
+ private final PayServiceManager manager;
+
+
+ @Resource
+ private PayNoticeProducer payNoticeProducer;
+
+// @Autowired
+// private MerchantDetailsManager merchantDetailsManager;
+
+
+// @GetMapping("merchantExists")
+// public Map merchantExists() {
+// return new MapGen("exist", merchantDetailsManager.merchantExists("1")).getAttr();
+// }
@@ -135,44 +155,23 @@ public class AppOrderController {
* 订单支付
*/
@PreAuthenticated
- @PostMapping("/pay")
+ @PostMapping(value = "/pay")
@Operation(summary = "订单支付")
- public CommonResult pay(@Valid @RequestBody AppPayParam param) {
- // Map map = new LinkedHashMap<>();
+ public CommonResult