3.3 门店列表

3.3.1 商户服务查询门店列表

3.3.1.1 接口定义

1、接口描述

1)根据商户id和分页信息查询门店列表

2、接口定义如下:MerchantService

/**
\* 分页条件查询商户下门店
\* @param storeDTO
\* @param pageNo
\* @param pageSize
\* @return
*/
PageVO<StoreDTO> queryStoreByPage(StoreDTO storeDTO, Integer pageNo, Integer pageSize);
3.3.1.2 接口实现

3、在MerchantServiceImpl中实现queryStoreByPage方法:

@Override
public PageVO<StoreDTO> queryStoreByPage(StoreDTO storeDTO, Integer pageNo, Integer pageSize) {

    // 创建分页
    Page<Store> page = new Page<>(pageNo, pageSize);
    // 构造查询条件
    QueryWrapper<Store> qw = new QueryWrapper();
    if (null != storeDTO && null != storeDTO.getMerchantId()) {
        qw.lambda().eq(Store::getMerchantId, storeDTO.getMerchantId());
    }
    // 执行查询
    IPage<Store> storeIPage = storeMapper.selectPage(page, qw);
    // entity List转DTO List
    List<StoreDTO> storeList = StoreConvert.INSTANCE.listentity2dto(storeIPage.getRecords());
    // 封装结果集
    return new PageVO<>(storeList, storeIPage.getTotal(), pageNo, pageSize);
}

3.3.2 商户平台应用查询门店列表

3.3.2.1 接口定义

1、接口描述

1)请求商户服务查询门店列表

2、接口定义如下:StoreController

package com.huiminpay.merchant.controller;

@Api(value = "商户平台‐门店管理", tags = "商户平台‐门店管理", description = "商户平台‐门店的增删改查")
@RestController
public class StoreController {

    @ApiOperation("分页条件查询商户下门店")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "pageNo", value = "页码", required = true, dataType = "int", 
                          paramType = "query"),
        @ApiImplicitParam(name = "pageSize", value = "每页记录数", required = true, dataType = 
                          "int", paramType = "query")})
    @PostMapping("/my/stores/merchants/page")
    public PageVO<StoreDTO> queryStoreByPage(@RequestParam Integer pageNo, @RequestParam Integer pageSize){

    }
}
3.3.2.2 接口实现

前端JS在Long长度大于17位时会出现精度丢失的问题,由于项目中门店ID的长度会超过17位,所以在此处添加注解将返回给前端的门店ID自动转为string类型

1)使用jackson来完成自动转换,在huiminpay-merchant-api工程中添加依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.9</version>
</dependency>

2)在StoreDTO中添加注解:

@ApiModelProperty("门店Id")
@JsonSerialize(using= ToStringSerializer.class)
private Long id;

2、在StoreController中实现queryStoreByPage方法:

@PostMapping("/my/stores/merchants/page")
public PageVO<StoreDTO> queryStoreByPage(@RequestParam Integer pageNo, 
                                         @RequestParam Integer pageSize){
    //获取商户id
    Long merchantId = SecurityUtil.getMerchantId();
    StoreDTO storeDTO = new StoreDTO();
    storeDTO.setMerchantId(merchantId);
    //分页查询
    PageVO<StoreDTO> stores = merchantService.queryStoreByPage(storeDTO, pageNo, pageSize);
    return stores;
}
3.3.2.3 接口测试

由于已经接入SaaS,请求统一走网关的端口56010。

1首先请求认证获取token,及租户的id

1)启动三个SaaS服务

2)使用账号申请token

2使用Postman:

POST http://localhost:56010/merchant/my/stores/merchants/page?pageNo=1&pageSize=20 查询门店列表

注意在header中添加 Authorization及tenantId。