Bläddra i källkod

mall + pay:
1、增加获得支付渠道接口

YunaiV 1 år sedan
förälder
incheckning
3f33ca2d6b

+ 2 - 2
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/PayClientFactoryImpl.java

@@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.pay.core.client.PayClient;
 import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
 import cn.iocoder.yudao.framework.pay.core.client.PayClientFactory;
 import cn.iocoder.yudao.framework.pay.core.client.impl.alipay.*;
-import cn.iocoder.yudao.framework.pay.core.client.impl.weixin.WXLitePayClient;
+import cn.iocoder.yudao.framework.pay.core.client.impl.weixin.WxLitePayClient;
 import cn.iocoder.yudao.framework.pay.core.client.impl.weixin.WXNativePayClient;
 import cn.iocoder.yudao.framework.pay.core.client.impl.weixin.WxPayClientConfig;
 import cn.iocoder.yudao.framework.pay.core.client.impl.weixin.WxPubPayClient;
@@ -61,7 +61,7 @@ public class PayClientFactoryImpl implements PayClientFactory {
         // TODO @芋艿 WX_LITE WX_APP 如果不添加在 项目启动的时候去初始化会报错无法启动。所以我手动加了两个,具体需要你来配
         switch (channelEnum) {
             case WX_PUB: return (AbstractPayClient<Config>) new WxPubPayClient(channelId, (WxPayClientConfig) config);
-            case WX_LITE: return (AbstractPayClient<Config>) new WXLitePayClient(channelId, (WxPayClientConfig) config);
+            case WX_LITE: return (AbstractPayClient<Config>) new WxLitePayClient(channelId, (WxPayClientConfig) config);
             case WX_APP: return (AbstractPayClient<Config>) new WxPubPayClient(channelId, (WxPayClientConfig) config);
             case WX_NATIVE: return (AbstractPayClient<Config>) new WXNativePayClient(channelId, (WxPayClientConfig) config);
             case ALIPAY_WAP: return (AbstractPayClient<Config>) new AlipayWapPayClient(channelId, (AlipayPayClientConfig) config);

+ 2 - 2
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/WXLitePayClient.java → yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/WxLitePayClient.java

@@ -11,9 +11,9 @@ import lombok.extern.slf4j.Slf4j;
  * @author zwy
  */
 @Slf4j
-public class WXLitePayClient extends WxPubPayClient {
+public class WxLitePayClient extends WxPubPayClient {
 
-    public WXLitePayClient(Long channelId, WxPayClientConfig config) {
+    public WxLitePayClient(Long channelId, WxPayClientConfig config) {
         super(channelId, PayChannelEnum.WX_LITE.getCode(), config);
     }
 

+ 0 - 7
yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java

@@ -1,6 +1,5 @@
 package cn.iocoder.yudao.module.pay.enums;
 
-import cn.hutool.core.util.ObjectUtil;
 import cn.iocoder.yudao.framework.common.exception.ErrorCode;
 
 /**
@@ -21,21 +20,15 @@ public interface ErrorCodeConstants {
     ErrorCode PAY_CHANNEL_CLIENT_NOT_FOUND = new ErrorCode(1007001002, "支付渠道的客户端不存在");
     ErrorCode CHANNEL_NOT_EXISTS = new ErrorCode(1007001003, "支付渠道不存在");
     ErrorCode CHANNEL_EXIST_SAME_CHANNEL_ERROR = new ErrorCode(1007001005, "已存在相同的渠道");
-    ErrorCode CHANNEL_WECHAT_VERSION_2_MCH_KEY_IS_NULL = new ErrorCode(1007001006,"微信渠道v2版本中商户密钥不可为空");
-    ErrorCode CHANNEL_WECHAT_VERSION_3_PRIVATE_KEY_IS_NULL = new ErrorCode(1007001007,"微信渠道v3版本apiclient_key.pem不可为空");
-    ErrorCode CHANNEL_WECHAT_VERSION_3_CERT_KEY_IS_NULL = new ErrorCode(1007001008,"微信渠道v3版本中apiclient_cert.pem不可为空");
-    ErrorCode PAY_CHANNEL_NOTIFY_VERIFY_FAILED = new ErrorCode(1007001009, "渠道通知校验失败");
 
     // ========== ORDER 模块 1007002000 ==========
     ErrorCode PAY_ORDER_NOT_FOUND = new ErrorCode(1007002000, "支付订单不存在");
     ErrorCode PAY_ORDER_STATUS_IS_NOT_WAITING = new ErrorCode(1007002001, "支付订单不处于待支付");
     ErrorCode PAY_ORDER_STATUS_IS_NOT_SUCCESS = new ErrorCode(1007002002, "支付订单不处于已支付");
-    ErrorCode PAY_ORDER_ERROR_USER = new ErrorCode(1007002003, "支付订单用户不正确");
 
     // ========== ORDER 模块(拓展单) 1007003000 ==========
     ErrorCode PAY_ORDER_EXTENSION_NOT_FOUND = new ErrorCode(1007003000, "支付交易拓展单不存在");
     ErrorCode PAY_ORDER_EXTENSION_STATUS_IS_NOT_WAITING = new ErrorCode(1007003001, "支付交易拓展单不处于待支付");
-    ErrorCode PAY_ORDER_EXTENSION_STATUS_IS_NOT_SUCCESS = new ErrorCode(1007003002, "支付订单不处于已支付");
 
     // ========== 支付模块(退款) 1007006000 ==========
     ErrorCode PAY_REFUND_AMOUNT_EXCEED = new ErrorCode(1007006000, "退款金额超过订单可退款金额");

+ 17 - 17
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/merchant/PayChannelController.java

@@ -1,17 +1,17 @@
 package cn.iocoder.yudao.module.pay.controller.admin.merchant;
 
-import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.*;
-import cn.iocoder.yudao.module.pay.convert.channel.PayChannelConvert;
-import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
-import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
-import io.swagger.v3.oas.annotations.tags.Tag;
+import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.*;
+import cn.iocoder.yudao.module.pay.convert.channel.PayChannelConvert;
+import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
+import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService;
+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.Operation;
+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.*;
@@ -20,10 +20,11 @@ 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 java.util.Set;
 
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
 
 @Tag(name = "管理后台 - 支付渠道")
@@ -68,16 +69,6 @@ public class PayChannelController {
         return success(PayChannelConvert.INSTANCE.convert(channel));
     }
 
-    @GetMapping("/list")
-    @Operation(summary = "获得支付渠道列表")
-    @Parameter(name = "ids", description = "编号列表",
-            required = true, example = "1024,2048")
-    @PreAuthorize("@ss.hasPermission('pay:channel:query')")
-    public CommonResult<List<PayChannelRespVO>> getChannelList(@RequestParam("ids") Collection<Long> ids) {
-        List<PayChannelDO> list = channelService.getChannelList(ids);
-        return success(PayChannelConvert.INSTANCE.convertList(list));
-    }
-
     @GetMapping("/page")
     @Operation(summary = "获得支付渠道分页")
     @PreAuthorize("@ss.hasPermission('pay:channel:query')")
@@ -98,6 +89,7 @@ public class PayChannelController {
         ExcelUtils.write(response, "支付渠道.xls", "数据", PayChannelExcelVO.class, datas);
     }
 
+    // TODO 芋艿:需要 review 下实现
     @GetMapping("/get-channel")
     @Operation(summary = "根据条件查询微信支付渠道")
     @Parameters({
@@ -121,4 +113,12 @@ public class PayChannelController {
         return success(respVo);
     }
 
+    @GetMapping("/get-enable-code-list")
+    @Operation(summary = "获得指定应用的开启的支付渠道编码列表")
+    @Parameter(name = "appId", description = "应用编号", required = true, example = "1")
+    public CommonResult<Set<String>> getEnableChannelCodeList(@RequestParam("appId") Long appId) {
+        List<PayChannelDO> channels = channelService.getEnableChannelList(appId);
+        return success(convertSet(channels, PayChannelDO::getCode));
+    }
+
 }

+ 39 - 0
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/channel/AppPayChannelController.java

@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.module.pay.controller.app.channel;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.module.pay.dal.dataobject.merchant.PayChannelDO;
+import cn.iocoder.yudao.module.pay.service.merchant.PayChannelService;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Set;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
+
+@Tag(name = "用户 App - 支付渠道")
+@RestController
+@RequestMapping("/pay/channel")
+@Validated
+public class AppPayChannelController {
+
+    @Resource
+    private PayChannelService channelService;
+
+    @GetMapping("/get-enable-code-list")
+    @Operation(summary = "获得指定应用的开启的支付渠道编码列表")
+    @Parameter(name = "appId", description = "应用编号", required = true, example = "1")
+    public CommonResult<Set<String>> getEnableChannelCodeList(@RequestParam("appId") Long appId) {
+        List<PayChannelDO> channels = channelService.getEnableChannelList(appId);
+        return success(convertSet(channels, PayChannelDO::getCode));
+    }
+
+}

+ 7 - 15
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/dal/mysql/merchant/PayChannelMapper.java

@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.pay.dal.mysql.merchant;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
 import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelExportReqVO;
 import cn.iocoder.yudao.module.pay.controller.admin.merchant.vo.channel.PayChannelPageReqVO;
@@ -43,21 +44,6 @@ public interface PayChannelMapper extends BaseMapperX<PayChannelDO> {
                 .orderByDesc("id"));
     }
 
-    /**
-     * 根据条件获取渠道数量
-     *
-     * @param merchantId 商户编号
-     * @param appid      应用编号
-     * @param code       渠道编码
-     * @return 数量
-     */
-    default Integer selectCount(Long merchantId, Long appid, String code) {
-        return this.selectCount(new QueryWrapper<PayChannelDO>().lambda()
-                .eq(PayChannelDO::getMerchantId, merchantId)
-                .eq(PayChannelDO::getAppId, appid)
-                .eq(PayChannelDO::getCode, code)).intValue();
-    }
-
     /**
      * 根据条件获取渠道
      *
@@ -86,4 +72,10 @@ public interface PayChannelMapper extends BaseMapperX<PayChannelDO> {
                 .in(PayChannelDO::getAppId, appIds));
     }
 
+    default List<PayChannelDO> selectListByAppId(Long appId, Integer status) {
+        return selectList(new LambdaQueryWrapperX<PayChannelDO>()
+                .eq(PayChannelDO::getAppId, appId)
+                .eq(PayChannelDO::getStatus, status));
+    }
+
 }

+ 8 - 19
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelService.java

@@ -54,15 +54,6 @@ public interface PayChannelService {
      */
     PayChannelDO getChannel(Long id);
 
-    /**
-     * 获得支付渠道列表
-     *
-     * @param ids 编号
-     * @return 支付渠道
-     * 列表
-     */
-    List<PayChannelDO> getChannelList(Collection<Long> ids);
-
     /**
      * 获得支付渠道分页
      *
@@ -89,16 +80,6 @@ public interface PayChannelService {
      */
     List<PayChannelDO> getChannelListByAppIds(Collection<Long> appIds);
 
-    /**
-     * 根据条件获取渠道数量
-     *
-     * @param merchantId 商户编号
-     * @param appid      应用编号
-     * @param code       渠道编码
-     * @return 数量
-     */
-    Integer getChannelCountByConditions(Long merchantId, Long appid, String code);
-
     /**
      * 根据条件获取渠道
      *
@@ -130,4 +111,12 @@ public interface PayChannelService {
      */
     PayChannelDO validPayChannel(Long appId, String code);
 
+    /**
+     * 获得指定应用的开启的渠道列表
+     *
+     * @param appId 应用编号
+     * @return 渠道列表
+     */
+    List<PayChannelDO> getEnableChannelList(Long appId);
+
 }

+ 7 - 26
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/merchant/PayChannelServiceImpl.java

@@ -24,7 +24,6 @@ import org.springframework.validation.annotation.Validated;
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import javax.validation.Validator;
-import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.List;
 
@@ -42,11 +41,6 @@ import static cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants.CHANNEL_NOT_E
 @Validated
 public class PayChannelServiceImpl implements PayChannelService {
 
-    /**
-     * 缓存菜单的最大更新时间,用于后续的增量轮询,判断是否有更新
-     */
-    private volatile LocalDateTime maxUpdateTime;
-
     @Resource
     private PayClientFactory payClientFactory;
 
@@ -121,11 +115,6 @@ public class PayChannelServiceImpl implements PayChannelService {
         return channelMapper.selectById(id);
     }
 
-    @Override
-    public List<PayChannelDO> getChannelList(Collection<Long> ids) {
-        return channelMapper.selectBatchIds(ids);
-    }
-
     @Override
     public PageResult<PayChannelDO> getChannelPage(PayChannelPageReqVO pageReqVO) {
         return channelMapper.selectPage(pageReqVO);
@@ -147,20 +136,6 @@ public class PayChannelServiceImpl implements PayChannelService {
         return channelMapper.getChannelListByAppIds(appIds);
     }
 
-
-    /**
-     * 根据条件获取渠道数量
-     *
-     * @param merchantId 商户编号
-     * @param appid      应用编号
-     * @param code       渠道编码
-     * @return 数量
-     */
-    @Override
-    public Integer getChannelCountByConditions(Long merchantId, Long appid, String code) {
-        return this.channelMapper.selectCount(merchantId, appid, code);
-    }
-
     /**
      * 根据条件获取渠道
      *
@@ -204,10 +179,15 @@ public class PayChannelServiceImpl implements PayChannelService {
     @Override
     public PayChannelDO validPayChannel(Long appId, String code) {
         PayChannelDO channel = channelMapper.selectByAppIdAndCode(appId, code);
-        this.validPayChannel(channel);
+        validPayChannel(channel);
         return channel;
     }
 
+    @Override
+    public List<PayChannelDO> getEnableChannelList(Long appId) {
+        return channelMapper.selectListByAppId(appId, CommonStatusEnum.ENABLE.getStatus());
+    }
+
     private void validPayChannel(PayChannelDO channel) {
         if (channel == null) {
             throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_NOT_FOUND);
@@ -216,4 +196,5 @@ public class PayChannelServiceImpl implements PayChannelService {
             throw ServiceExceptionUtil.exception(ErrorCodeConstants.PAY_CHANNEL_IS_DISABLE);
         }
     }
+
 }