feat 商户相关功能

This commit is contained in:
xxm
2023-05-21 20:57:08 +08:00
parent 78ca6f2ebf
commit 9aa5b157d6
10 changed files with 54 additions and 50 deletions

View File

@@ -47,7 +47,7 @@ Dax-Pay是Bootx-Platform的子项目之一主要是对支付收单和账务
| 支付策略 | Strategy | 对支付通道和支付方式进行封装,可以完成一种支付操作 | | 支付策略 | Strategy | 对支付通道和支付方式进行封装,可以完成一种支付操作 |
| 聚合支付 | | 通常是扫码或收款时,根据客户使用应用的不同,自动识别是哪种支付通道,并进行支付 | | 聚合支付 | | 通常是扫码或收款时,根据客户使用应用的不同,自动识别是哪种支付通道,并进行支付 |
| 组合支付 | | 同时使用多种支付通道进行支付,如同时使用余额+现金+储值卡+微信支付进行支付 | | 组合支付 | | 同时使用多种支付通道进行支付,如同时使用余额+现金+储值卡+微信支付进行支付 |
| 商户 | merchant | | | 商户 | Merchant | |
| 商户应用 | mchApp | | | 商户应用 | mchApp | |
| 分账 | | | | 分账 | | |
| 对账 | | | | 对账 | | |

View File

@@ -43,4 +43,18 @@ public interface PayChannelCode {
/** 异步支付通道 */ /** 异步支付通道 */
List<Integer> ASYNC_TYPE = Arrays.asList(ALI, WECHAT, UNION_PAY, APPLE_PAY); List<Integer> ASYNC_TYPE = Arrays.asList(ALI, WECHAT, UNION_PAY, APPLE_PAY);
/** 支付排序列表 */
List<Integer> SORT_LIST = Arrays.asList(
ALI,
WECHAT,
UNION_PAY,
CASH,
WALLET,
VOUCHER,
CREDIT_CARD,
APPLE_PAY,
CHANNEL_PAY,
AGGREGATION
);
} }

View File

@@ -22,6 +22,10 @@ import lombok.experimental.Accessors;
@TableName("pay_mch_app_config") @TableName("pay_mch_app_config")
public class MchAppPayConfig extends MpBaseEntity implements EntityBaseFunction<MchAppPayConfigDto> { public class MchAppPayConfig extends MpBaseEntity implements EntityBaseFunction<MchAppPayConfigDto> {
/** 关联配置ID */
@DbColumn(comment = "关联应用ID")
private Long appId;
/** 关联配置ID */ /** 关联配置ID */
@DbColumn(comment = "关联配置ID") @DbColumn(comment = "关联配置ID")
private Long configId; private Long configId;

View File

@@ -1,6 +1,9 @@
package cn.bootx.platform.daxpay.core.merchant.entity; package cn.bootx.platform.daxpay.core.merchant.entity;
import cn.bootx.mybatis.table.modify.annotation.DbColumn; import cn.bootx.mybatis.table.modify.annotation.DbColumn;
import cn.bootx.mybatis.table.modify.annotation.DbTable;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.MySqlIndex;
import cn.bootx.mybatis.table.modify.mybatis.mysq.constants.MySqlIndexType;
import cn.bootx.platform.common.core.function.EntityBaseFunction; import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity; import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
import cn.bootx.platform.daxpay.core.merchant.convert.MchApplicationConvert; import cn.bootx.platform.daxpay.core.merchant.convert.MchApplicationConvert;
@@ -16,7 +19,9 @@ import lombok.experimental.Accessors;
* @author xxm * @author xxm
* @date 2023-05-19 * @date 2023-05-19
*/ */
@DbTable(comment = "商户应用")
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@MySqlIndex(columns = "app_no",type = MySqlIndexType.UNIQUE,comment = "应用编码唯一索引")
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@TableName("pay_application") @TableName("pay_application")

View File

@@ -1,6 +1,7 @@
package cn.bootx.platform.daxpay.core.merchant.entity; package cn.bootx.platform.daxpay.core.merchant.entity;
import cn.bootx.mybatis.table.modify.annotation.DbColumn; import cn.bootx.mybatis.table.modify.annotation.DbColumn;
import cn.bootx.mybatis.table.modify.annotation.DbTable;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.MySqlIndex; import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.MySqlIndex;
import cn.bootx.mybatis.table.modify.mybatis.mysq.constants.MySqlIndexType; import cn.bootx.mybatis.table.modify.mybatis.mysq.constants.MySqlIndexType;
import cn.bootx.platform.common.core.function.EntityBaseFunction; import cn.bootx.platform.common.core.function.EntityBaseFunction;
@@ -23,6 +24,7 @@ import lombok.experimental.FieldNameConstants;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@FieldNameConstants @FieldNameConstants
@Data @Data
@DbTable(comment = "商户")
@Accessors(chain = true) @Accessors(chain = true)
@TableName("pay_merchant") @TableName("pay_merchant")
public class MerchantInfo extends MpBaseEntity implements EntityBaseFunction<MerchantInfoDto> { public class MerchantInfo extends MpBaseEntity implements EntityBaseFunction<MerchantInfoDto> {

View File

@@ -1,20 +1,19 @@
package cn.bootx.platform.daxpay.core.merchant.service; package cn.bootx.platform.daxpay.core.merchant.service;
import cn.bootx.platform.common.core.exception.DataNotExistException;
import cn.bootx.platform.common.core.rest.PageResult;
import cn.bootx.platform.common.core.rest.param.PageParam; import cn.bootx.platform.common.core.rest.param.PageParam;
import cn.bootx.platform.common.core.util.ResultConvertUtil; import cn.bootx.platform.daxpay.code.pay.PayChannelCode;
import cn.bootx.platform.common.mybatisplus.util.MpUtil;
import cn.bootx.platform.daxpay.core.merchant.dao.MchAppPayConfigManager; import cn.bootx.platform.daxpay.core.merchant.dao.MchAppPayConfigManager;
import cn.bootx.platform.daxpay.core.merchant.entity.MchAppPayConfig; import cn.bootx.platform.daxpay.core.merchant.entity.MchAppPayConfig;
import cn.bootx.platform.daxpay.dto.merchant.MchAppPayConfigDto; import cn.bootx.platform.daxpay.dto.merchant.MchAppPayConfigDto;
import cn.bootx.platform.daxpay.param.merchant.MchAppPayConfigParam;
import cn.hutool.core.bean.BeanUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
/** /**
* 商户应用支付配置 * 商户应用支付配置
@@ -28,48 +27,24 @@ public class MchAppPayConfigService {
private final MchAppPayConfigManager mchAppPayConfigManager; private final MchAppPayConfigManager mchAppPayConfigManager;
/** /**
* 添加 * 根据应用ID删除
*/ */
public void add(MchAppPayConfigParam param){ public void deleteByAppId(Long appId){
MchAppPayConfig mchAppPayConfig = MchAppPayConfig.init(param); mchAppPayConfigManager.deleteByField(MchAppPayConfig::getAppId,appId);
mchAppPayConfigManager.save(mchAppPayConfig);
} }
/** /**
* 修改 * 支付渠道配置列表
*/ */
public void update(MchAppPayConfigParam param){ public List<MchAppPayConfigDto> ListByApp(PageParam pageParam,Long appId){
MchAppPayConfig mchAppPayConfig = mchAppPayConfigManager.findById(param.getId()).orElseThrow(DataNotExistException::new); val mchAppPayConfigMap = mchAppPayConfigManager.findAllByField(MchAppPayConfig::getAppId, appId)
.stream()
BeanUtil.copyProperties(param,mchAppPayConfig, CopyOptions.create().ignoreNullValue()); .map(MchAppPayConfig::toDto)
mchAppPayConfigManager.updateById(mchAppPayConfig); .collect(Collectors.toMap(MchAppPayConfigDto::getChannel, Function.identity()));
} // 进行排序并返回
return PayChannelCode.SORT_LIST.stream()
/** .map(mchAppPayConfigMap::get)
* 分页 .filter(Objects::nonNull)
*/ .collect(Collectors.toList());
public PageResult<MchAppPayConfigDto> page(PageParam pageParam,MchAppPayConfigParam mchAppPayConfigParam){
return MpUtil.convert2DtoPageResult(mchAppPayConfigManager.page(pageParam,mchAppPayConfigParam));
}
/**
* 获取单条
*/
public MchAppPayConfigDto findById(Long id){
return mchAppPayConfigManager.findById(id).map(MchAppPayConfig::toDto).orElseThrow(DataNotExistException::new);
}
/**
* 获取全部
*/
public List<MchAppPayConfigDto> findAll(){
return ResultConvertUtil.dtoListConvert(mchAppPayConfigManager.findAll());
}
/**
* 删除
*/
public void delete(Long id){
mchAppPayConfigManager.deleteById(id);
} }
} }

View File

@@ -73,4 +73,6 @@ public class MchApplicationService {
public void delete(Long id){ public void delete(Long id){
mchApplicationManager.deleteById(id); mchApplicationManager.deleteById(id);
} }
} }

View File

@@ -17,10 +17,12 @@ import lombok.experimental.Accessors;
@Accessors(chain = true) @Accessors(chain = true)
public class MchAppPayConfigDto extends BaseDto { public class MchAppPayConfigDto extends BaseDto {
@Schema(description = "关联应用ID")
private Long appId;
@Schema(description = "关联配置ID") @Schema(description = "关联配置ID")
private Long configId; private Long configId;
@Schema(description = "支付通道类型") @Schema(description = "支付通道类型")
private String channel; private Integer channel;
@Schema(description = "支付通道名称") @Schema(description = "支付通道名称")
private String channelName; private String channelName;
@Schema(description = "状态") @Schema(description = "状态")

View File

@@ -29,8 +29,8 @@ public class MerchantInfoDto extends BaseDto {
private String contactName; private String contactName;
@Schema(description = "联系人手机号") @Schema(description = "联系人手机号")
private String contactTel; private String contactTel;
@Schema(description = "是否停用") @Schema(description = "状态类型")
private String deactivate; private String state;
@Schema(description = "商户备注") @Schema(description = "商户备注")
private String remark; private String remark;

View File

@@ -29,8 +29,8 @@ public class MerchantInfoParam {
private String contactName; private String contactName;
@Schema(description = "联系人手机号") @Schema(description = "联系人手机号")
private String contactTel; private String contactTel;
@Schema(description = "是否停用") @Schema(description = "状态类型")
private String deactivate; private String state;
@Schema(description = "商户备注") @Schema(description = "商户备注")
private String remark; private String remark;