From 148dfb1d1d5d6e2bf3b898343209f5096a9a9cbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=80=AA=E5=A4=A7=E9=87=8E?= Date: Tue, 6 Jun 2023 14:17:37 +0800 Subject: [PATCH 1/3] =?UTF-8?q?1=E3=80=81=E6=B7=BB=E5=8A=A0=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=95=86=E4=B8=8B=E6=9C=89=E6=95=88=E5=95=86=E6=88=B7?= =?UTF-8?q?=E5=8F=8A=E6=97=A0=E6=95=88=E5=95=86=E6=88=B7=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=202=E3=80=81=E6=96=B0=E5=A2=9E=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=95=86=E7=BB=9F=E8=AE=A1=E6=9C=89=E6=95=88/?= =?UTF-8?q?=E6=97=A0=E6=95=88=E5=95=86=E6=88=B7=E6=95=B0=E9=87=8F=203?= =?UTF-8?q?=E3=80=81=E6=B7=BB=E5=8A=A0=E5=8A=A8=E6=80=81=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E6=96=B9=E6=B3=95=204=E3=80=81=E6=9C=8D=E5=8A=A1=E5=95=86?= =?UTF-8?q?=E5=AE=9E=E4=BD=93=E5=A2=9E=E5=8A=A0=E6=8E=92=E5=BA=8F=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeequan/jeepay/core/entity/IsvInfo.java | 10 +++- .../mgr/ctrl/isv/IsvInfoController.java | 35 +++++++++-- .../jeepay/service/impl/IsvInfoService.java | 59 ++++++++++++++++++- .../jeepay/service/impl/MchInfoService.java | 21 ++++++- 4 files changed, 118 insertions(+), 7 deletions(-) diff --git a/jeepay-core/src/main/java/com/jeequan/jeepay/core/entity/IsvInfo.java b/jeepay-core/src/main/java/com/jeequan/jeepay/core/entity/IsvInfo.java index 588fa83..c7b8d09 100644 --- a/jeepay-core/src/main/java/com/jeequan/jeepay/core/entity/IsvInfo.java +++ b/jeepay-core/src/main/java/com/jeequan/jeepay/core/entity/IsvInfo.java @@ -16,13 +16,17 @@ package com.jeequan.jeepay.core.entity; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.jeequan.jeepay.core.model.BaseModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.apache.ibatis.builder.MapperBuilderAssistant; import java.io.Serializable; import java.util.Date; @@ -43,6 +47,7 @@ public class IsvInfo extends BaseModel implements Serializable { //gw public static final LambdaQueryWrapper gw(){ + TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), IsvInfo.class); return new LambdaQueryWrapper<>(); } @@ -109,5 +114,8 @@ public class IsvInfo extends BaseModel implements Serializable { */ private Date updatedAt; + // 用于标记前端传递排序字段 + @TableField(exist = false) + private String orderItem; -} +} \ No newline at end of file diff --git a/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/ctrl/isv/IsvInfoController.java b/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/ctrl/isv/IsvInfoController.java index 71a6a13..04d4d79 100644 --- a/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/ctrl/isv/IsvInfoController.java +++ b/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/ctrl/isv/IsvInfoController.java @@ -16,6 +16,7 @@ package com.jeequan.jeepay.mgr.ctrl.isv; import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.ISqlSegment; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.jeequan.jeepay.components.mq.model.ResetIsvMchAppInfoConfigMQ; @@ -23,6 +24,7 @@ import com.jeequan.jeepay.components.mq.vender.IMQSender; import com.jeequan.jeepay.core.aop.MethodLog; import com.jeequan.jeepay.core.constants.ApiCodeEnum; import com.jeequan.jeepay.core.entity.IsvInfo; +import com.jeequan.jeepay.core.exception.BizException; import com.jeequan.jeepay.core.model.ApiRes; import com.jeequan.jeepay.mgr.ctrl.CommonCtrl; import com.jeequan.jeepay.service.impl.IsvInfoService; @@ -34,6 +36,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import static com.baomidou.mybatisplus.core.enums.SqlKeyword.*; + /** * 服务商管理类 * @@ -67,9 +71,12 @@ public class IsvInfoController extends CommonCtrl { if (isvInfo.getState() != null) { wrapper.eq(IsvInfo::getState, isvInfo.getState()); } - wrapper.orderByDesc(IsvInfo::getCreatedAt); - IPage pages = isvInfoService.page(getIPage(true), wrapper); - + if(StringUtils.isNotEmpty(isvInfo.getOrderItem())){ + setOrderBy(wrapper,true,isvInfo.getOrderItem()); + }else{ + wrapper.orderByDesc(IsvInfo::getCreatedAt); + } + IPage pages = isvInfoService.pageForIsv(getIPage(true), wrapper); return ApiRes.page(pages); } @@ -146,4 +153,24 @@ public class IsvInfoController extends CommonCtrl { } return ApiRes.ok(isvInfo); } -} + + /** + * 设置动态字段排序 + * TODO 提取公共方法,供调用 + * @param queryWrapper + * @param asc 是否升序 + * @param column 排序字段 + * @param 泛型 + */ + public static void setOrderBy(LambdaQueryWrapper queryWrapper, boolean asc,String column) { + try { + if(StringUtils.isEmpty(column)){ + return; + } + ISqlSegment[] sqlSegments = {ORDER_BY, ()->column, asc ? ASC : DESC}; + queryWrapper.getExpression().add(sqlSegments); + } catch (Exception e) { + throw new BizException("动态排序异常:" + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/IsvInfoService.java b/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/IsvInfoService.java index 78d3121..c1c288b 100644 --- a/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/IsvInfoService.java +++ b/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/IsvInfoService.java @@ -15,6 +15,9 @@ */ package com.jeequan.jeepay.service.impl; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jeequan.jeepay.core.constants.CS; import com.jeequan.jeepay.core.entity.IsvInfo; @@ -22,10 +25,18 @@ import com.jeequan.jeepay.core.entity.MchInfo; import com.jeequan.jeepay.core.entity.PayInterfaceConfig; import com.jeequan.jeepay.core.exception.BizException; import com.jeequan.jeepay.service.mapper.IsvInfoMapper; +import lombok.Data; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + /** *

* 服务商信息表 服务实现类 @@ -69,4 +80,50 @@ public class IsvInfoService extends ServiceImpl { throw new BizException("删除服务商失败"); } } -} + + /** + * 获取服务商列表信息 + * @param page + * @param queryWrapper + * @return + */ + public IPage pageForIsv(IPage page,Wrapper queryWrapper) { + IPage pages = isvInfoService.page(page, queryWrapper); + IPage resultPages = new Page<>(); + BeanUtils.copyProperties(pages,resultPages); + List isvInfoResps = new ArrayList<>(); + List isvNos = pages.getRecords().stream().map(isvInfo -> isvInfo.getIsvNo()).collect(Collectors.toList()); + List> computMchList = mchInfoService.computeMchNum(isvNos); + Map> isvNoKeyMap = computMchList.stream().collect(Collectors.toMap(map -> (String) map.get("isv_no"), map1 -> map1)); + pages.getRecords().stream().forEach(isvInfo -> { + IsvInfoResp isvInfoResp = new IsvInfoResp(); + BeanUtils.copyProperties(isvInfo,isvInfoResp); + isvInfoResp.setNormalMchNum(Optional.ofNullable(isvNoKeyMap) + .map(map->(Map)map.get(isvInfo.getIsvNo())) + .map(map->(Long)map.get("normal_num")) + .orElse(0L)); + isvInfoResp.setStopMchNum(Optional.ofNullable(isvNoKeyMap) + .map(map->(Map)map.get(isvInfo.getIsvNo())) + .map(map->(Long)map.get("stop_num")) + .orElse(0L)); + isvInfoResps.add(isvInfoResp); + }); + + resultPages.setRecords(isvInfoResps); + return resultPages; + } + + /** + * 服务商响应对象 + * TODO 提取公共响应dto包内 + */ + @Data + public static class IsvInfoResp extends IsvInfo{ + + // 有效商户数量 + private Long normalMchNum; + // 无效商户数量 + private Long stopMchNum; + + } +} \ No newline at end of file diff --git a/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/MchInfoService.java b/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/MchInfoService.java index ae274c0..df28c8e 100644 --- a/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/MchInfoService.java +++ b/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/MchInfoService.java @@ -17,6 +17,7 @@ package com.jeequan.jeepay.service.impl; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.RandomUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jeequan.jeepay.core.constants.ApiCodeEnum; @@ -32,6 +33,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.Map; /** *

@@ -178,4 +180,21 @@ public class MchInfoService extends ServiceImpl { throw new BizException(e.getMessage()); } } -} + + /** + * 根据分组及条件,计算商户的数量,此处包含了在用数量及停用数量 + * 此处未处理条件,仅仅是做了一个demo + */ + public List> computeMchNum(List isvNos){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + if(!CollectionUtils.isEmpty(isvNos)){ + queryWrapper.in("isv_no",isvNos); + } + queryWrapper.groupBy("isv_no"); + queryWrapper.select("isv_no,ifnull(count(CASE WHEN state = 1 THEN 1 END),0) as normal_num," + + "ifnull(count(CASE WHEN state = 0 THEN 0 END),0) as stop_num"); + + List> maps = this.baseMapper.selectMaps(queryWrapper); + return maps; + } +} \ No newline at end of file -- Gitee From 487c7fb4f45663591f55404fcf0da54e6b1ca081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=80=AA=E5=A4=A7=E9=87=8E?= Date: Wed, 7 Jun 2023 11:06:20 +0800 Subject: [PATCH 2/3] =?UTF-8?q?1=E3=80=81=E4=BD=BF=E7=94=A8=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E6=A1=86=E6=9E=B6=E4=B8=AD=E4=BC=A0=E5=8F=82=E5=8F=8A?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E6=A0=BC=E5=BC=8F=202=E3=80=81=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E6=9C=8D=E5=8A=A1=E5=95=86=E7=BB=9F=E8=AE=A1=E5=95=86?= =?UTF-8?q?=E6=88=B7=E6=95=B0=E9=87=8F=E5=A4=84=E7=90=86=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeequan/jeepay/core/entity/IsvInfo.java | 10 +---- .../mgr/ctrl/isv/IsvInfoController.java | 7 ++-- .../jeepay/service/impl/IsvInfoService.java | 42 +++++-------------- 3 files changed, 16 insertions(+), 43 deletions(-) diff --git a/jeepay-core/src/main/java/com/jeequan/jeepay/core/entity/IsvInfo.java b/jeepay-core/src/main/java/com/jeequan/jeepay/core/entity/IsvInfo.java index c7b8d09..588fa83 100644 --- a/jeepay-core/src/main/java/com/jeequan/jeepay/core/entity/IsvInfo.java +++ b/jeepay-core/src/main/java/com/jeequan/jeepay/core/entity/IsvInfo.java @@ -16,17 +16,13 @@ package com.jeequan.jeepay.core.entity; import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.jeequan.jeepay.core.model.BaseModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import org.apache.ibatis.builder.MapperBuilderAssistant; import java.io.Serializable; import java.util.Date; @@ -47,7 +43,6 @@ public class IsvInfo extends BaseModel implements Serializable { //gw public static final LambdaQueryWrapper gw(){ - TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), IsvInfo.class); return new LambdaQueryWrapper<>(); } @@ -114,8 +109,5 @@ public class IsvInfo extends BaseModel implements Serializable { */ private Date updatedAt; - // 用于标记前端传递排序字段 - @TableField(exist = false) - private String orderItem; -} \ No newline at end of file +} diff --git a/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/ctrl/isv/IsvInfoController.java b/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/ctrl/isv/IsvInfoController.java index 04d4d79..e2ae29a 100644 --- a/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/ctrl/isv/IsvInfoController.java +++ b/jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/ctrl/isv/IsvInfoController.java @@ -61,6 +61,7 @@ public class IsvInfoController extends CommonCtrl { @RequestMapping(value="", method = RequestMethod.GET) public ApiRes list() { IsvInfo isvInfo = getObject(IsvInfo.class); + LambdaQueryWrapper wrapper = IsvInfo.gw(); if (StringUtils.isNotEmpty(isvInfo.getIsvNo())) { wrapper.eq(IsvInfo::getIsvNo, isvInfo.getIsvNo()); @@ -71,12 +72,12 @@ public class IsvInfoController extends CommonCtrl { if (isvInfo.getState() != null) { wrapper.eq(IsvInfo::getState, isvInfo.getState()); } - if(StringUtils.isNotEmpty(isvInfo.getOrderItem())){ - setOrderBy(wrapper,true,isvInfo.getOrderItem()); + if(StringUtils.isNotEmpty((String)isvInfo.getExt().get("orderItem"))){ + setOrderBy(wrapper,true,(String)isvInfo.getExt().get("orderItem")); }else{ wrapper.orderByDesc(IsvInfo::getCreatedAt); } - IPage pages = isvInfoService.pageForIsv(getIPage(true), wrapper); + IPage pages = isvInfoService.pageForIsv(getIPage(true), wrapper); return ApiRes.page(pages); } diff --git a/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/IsvInfoService.java b/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/IsvInfoService.java index c1c288b..f374d5e 100644 --- a/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/IsvInfoService.java +++ b/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/IsvInfoService.java @@ -87,43 +87,23 @@ public class IsvInfoService extends ServiceImpl { * @param queryWrapper * @return */ - public IPage pageForIsv(IPage page,Wrapper queryWrapper) { + public IPage pageForIsv(IPage page,Wrapper queryWrapper) { IPage pages = isvInfoService.page(page, queryWrapper); - IPage resultPages = new Page<>(); - BeanUtils.copyProperties(pages,resultPages); - List isvInfoResps = new ArrayList<>(); List isvNos = pages.getRecords().stream().map(isvInfo -> isvInfo.getIsvNo()).collect(Collectors.toList()); List> computMchList = mchInfoService.computeMchNum(isvNos); - Map> isvNoKeyMap = computMchList.stream().collect(Collectors.toMap(map -> (String) map.get("isv_no"), map1 -> map1)); + Map isvNoKeyArray = computMchList.stream().collect(Collectors.toMap(map -> (String) map.get("isv_no"), map1 -> new Object[]{map1.get("normal_num"), map1.get("stop_num")})); pages.getRecords().stream().forEach(isvInfo -> { - IsvInfoResp isvInfoResp = new IsvInfoResp(); - BeanUtils.copyProperties(isvInfo,isvInfoResp); - isvInfoResp.setNormalMchNum(Optional.ofNullable(isvNoKeyMap) - .map(map->(Map)map.get(isvInfo.getIsvNo())) - .map(map->(Long)map.get("normal_num")) + // 有效商户数量 + isvInfo.addExt("normalMchNum",Optional.ofNullable(isvNoKeyArray) + .map(map->map.get(isvInfo.getIsvNo())) + .map(obj->(Long)obj[0]) .orElse(0L)); - isvInfoResp.setStopMchNum(Optional.ofNullable(isvNoKeyMap) - .map(map->(Map)map.get(isvInfo.getIsvNo())) - .map(map->(Long)map.get("stop_num")) + // 无效商户数量 + isvInfo.addExt("stopMchNum",Optional.ofNullable(isvNoKeyArray) + .map(map->map.get(isvInfo.getIsvNo())) + .map(obj->(Long)obj[1]) .orElse(0L)); - isvInfoResps.add(isvInfoResp); }); - - resultPages.setRecords(isvInfoResps); - return resultPages; - } - - /** - * 服务商响应对象 - * TODO 提取公共响应dto包内 - */ - @Data - public static class IsvInfoResp extends IsvInfo{ - - // 有效商户数量 - private Long normalMchNum; - // 无效商户数量 - private Long stopMchNum; - + return pages; } } \ No newline at end of file -- Gitee From 268946ecda80e2367915f5eefe6dd7fbf3ecaf9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=80=AA=E5=A4=A7=E9=87=8E?= Date: Wed, 7 Jun 2023 13:42:55 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=95=86=E7=BB=9F=E8=AE=A1=E5=95=86=E6=88=B7=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeepay/service/impl/MchInfoService.java | 18 +++++++----------- .../jeepay/service/mapper/MchInfoMapper.java | 6 ++++++ .../jeepay/service/mapper/MchInfoMapper.xml | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/MchInfoService.java b/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/MchInfoService.java index df28c8e..0ad3bbe 100644 --- a/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/MchInfoService.java +++ b/jeepay-service/src/main/java/com/jeequan/jeepay/service/impl/MchInfoService.java @@ -182,19 +182,15 @@ public class MchInfoService extends ServiceImpl { } /** - * 根据分组及条件,计算商户的数量,此处包含了在用数量及停用数量 - * 此处未处理条件,仅仅是做了一个demo + * 根据分组及条件,计算商户的数量,此处包含了在用数量及停用数量 + * @param isvNos 服务商号集合 + * @return */ public List> computeMchNum(List isvNos){ - QueryWrapper queryWrapper = new QueryWrapper<>(); - if(!CollectionUtils.isEmpty(isvNos)){ - queryWrapper.in("isv_no",isvNos); + if(CollectionUtils.isEmpty(isvNos)){ + return new ArrayList<>(); } - queryWrapper.groupBy("isv_no"); - queryWrapper.select("isv_no,ifnull(count(CASE WHEN state = 1 THEN 1 END),0) as normal_num," + - "ifnull(count(CASE WHEN state = 0 THEN 0 END),0) as stop_num"); - - List> maps = this.baseMapper.selectMaps(queryWrapper); - return maps; + List> mchNumList = baseMapper.computeMchNum(isvNos); + return mchNumList; } } \ No newline at end of file diff --git a/jeepay-service/src/main/java/com/jeequan/jeepay/service/mapper/MchInfoMapper.java b/jeepay-service/src/main/java/com/jeequan/jeepay/service/mapper/MchInfoMapper.java index a8cbb03..13bcf62 100644 --- a/jeepay-service/src/main/java/com/jeequan/jeepay/service/mapper/MchInfoMapper.java +++ b/jeepay-service/src/main/java/com/jeequan/jeepay/service/mapper/MchInfoMapper.java @@ -17,6 +17,10 @@ package com.jeequan.jeepay.service.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.jeequan.jeepay.core.entity.MchInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; /** *

@@ -28,4 +32,6 @@ import com.jeequan.jeepay.core.entity.MchInfo; */ public interface MchInfoMapper extends BaseMapper { + /** 通过服务商号,统计服务商下有多少有效用户及无效用户 **/ + List> computeMchNum(@Param("isvNos") List isvNos); } diff --git a/jeepay-service/src/main/java/com/jeequan/jeepay/service/mapper/MchInfoMapper.xml b/jeepay-service/src/main/java/com/jeequan/jeepay/service/mapper/MchInfoMapper.xml index d6b1510..d16e6b3 100644 --- a/jeepay-service/src/main/java/com/jeequan/jeepay/service/mapper/MchInfoMapper.xml +++ b/jeepay-service/src/main/java/com/jeequan/jeepay/service/mapper/MchInfoMapper.xml @@ -21,4 +21,19 @@ + -- Gitee