微信小程序端服务器接口:全部服务以及实战

目录

一、全部服务:

二、实战:

1.新增地址簿:

2.地址簿列表:

3.地址簿详情:

4.地址簿编辑:

5.地址簿删除:

6.设置默认地址:

三、代码提交:​


一、全部服务:

请求路径:GET /foundations/customer/serve/serveTypeList

请求、响应参数:

sql 复制代码
-- 查询指定区域下上架服务对应的分类(启用)信息
select
        st.id as serveTypeId,
        st.img as serveTypeImg,
        st.sort_num as serveTypeSortNum,
        st.name as serveTypeName
from serve s
         inner join serve_item si on s.serve_item_id = si.id
         inner join serve_type st on si.serve_type_id = st.id
where s.region_id = 1692472339767234562
    and s.sale_status = 2
    and st.active_status = 2
group by st.id

ServeController:

java 复制代码
@GetMapping("/serveTypeList")
@ApiOperation("查询当前区域下上架服务对应的分类")
public List<ServeAggregationTypeSimpleResDTO> serveTypeList(Long regionId) {
    return serveService.serveTypeList(regionId);
}

IServeService:

java 复制代码
/**
 * 查询当前区域下上架服务对应的分类
 *
 * @param regionId 区域id
 * @return 当前区域下上架服务对应的分类
 */
List<ServeAggregationTypeSimpleResDTO> serveTypeList(Long regionId);

ServeServiceImpl:

java 复制代码
@Override
public List<ServeAggregationTypeSimpleResDTO> serveTypeList(Long regionId) {
    //1 对区域进行校验
    Region region = regionMapper.selectById(regionId);
    if (ObjectUtil.isNull(region) || region.getActiveStatus() != 2) {
        return Collections.emptyList();
    }

    //2 查询当前区域下上架服务对应的分类
    return baseMapper.findServeTypeListByRegionId(regionId);
}

ServeMapper:

java 复制代码
/**
 * 查询当前区域下上架服务对应的分类
 *
 * @param regionId 区域id
 * @return 当前区域下上架服务对应的分类
 */
List<ServeAggregationTypeSimpleResDTO> findServeTypeListByRegionId(Long regionId);

ServeMapper.xml:

XML 复制代码
<select id="findServeTypeListByRegionId"
        resultType="com.jzo2o.foundations.model.dto.response.ServeAggregationTypeSimpleResDTO"
        parameterType="java.lang.Long">
    select
        st.id as serveTypeId,
        st.img as serveTypeImg,
        st.sort_num as serveTypeSortNum,
        st.name as serveTypeName
    from serve s
             inner join serve_item si on s.serve_item_id = si.id
             inner join serve_type st on si.serve_type_id = st.id
    where s.region_id = #{regionId}
      and s.sale_status = 2
      and st.active_status = 2
    group by st.id
</select>

二、实战:

1.新增地址簿:

点击小程序底栏的我的--我的地址--新增地址,然后依次填写内容,保存地址簿,注意:

  1. 默认地址一个用户只能有一个,如果设置新地址为默认地址,则需要取消旧的默认地址

  2. 如果前端没有传递经纬度,则需要根据传递的详细地址调用高德地图获取经纬度(相关接口已经提供)

请求路径:POST /customer/consumer/address-book

请求、响应参数:

AddressBookController:

java 复制代码
@ApiOperation("新增地址")
@PostMapping
public void add(@RequestBody AddressBookUpsertReqDTO addressBookUpsertReqDTO) {
    addressBookService.add(addressBookUpsertReqDTO);
}

IAddressBookService:

java 复制代码
/**
 * 新增地址
 *
 * @param addressBookUpsertReqDTO 地址信息
 */
void add(AddressBookUpsertReqDTO addressBookUpsertReqDTO);

AddressBookServiceImpl:

java 复制代码
@Override
@Transactional(rollbackFor = Exception.class)
public void add(AddressBookUpsertReqDTO addressBookUpsertReqDTO) {
    //当前用户id
    Long userId = UserContext.currentUserId();

    //1. 如果新增地址设为默认,则将当前用户的其它地址设置为非默认
    if (1 == addressBookUpsertReqDTO.getIsDefault()) {
        //update address_book set is_default = 0 where user_id = 当前用户
        this.lambdaUpdate().set(AddressBook::getIsDefault, 0)
                .eq(AddressBook::getUserId, userId)
                .update();
    }

    //2. 拷贝赋值
    AddressBook addressBook = BeanUtil.toBean(addressBookUpsertReqDTO, AddressBook.class);
    addressBook.setUserId(userId);

    //3. 如果请求体中没有经纬度,则调用第三方api根据详细地址获取经纬度
    if (ObjectUtil.isEmpty(addressBookUpsertReqDTO.getLocation())) {
        //组装详细地址
        String completeAddress = addressBookUpsertReqDTO.getProvince() +
                addressBookUpsertReqDTO.getCity() +
                addressBookUpsertReqDTO.getCounty() +
                addressBookUpsertReqDTO.getAddress();
        //远程请求高德获取经纬度
        LocationResDTO locationDto = mapApi.getLocationByAddress(completeAddress);
        //经纬度(字符串格式:经度,纬度),经度在前,纬度在后
        String location = locationDto.getLocation();
        addressBookUpsertReqDTO.setLocation(location);
    }

    if (StringUtils.isNotEmpty(addressBookUpsertReqDTO.getLocation())) {
        // 经度
        addressBook.setLon(NumberUtils.parseDouble(addressBookUpsertReqDTO.getLocation().split(",")[0]));
        // 纬度
        addressBook.setLat(NumberUtils.parseDouble(addressBookUpsertReqDTO.getLocation().split(",")[1]));
    }

    //4. 执行保存操作
    getBaseMapper().insert(addressBook);
}

这里注意要注入MapApi的实例:

同时要在CustomerApplicaiton启动类上添加注解@EnableFeignClients(basePackages = "com.jzo2o.api")让该启动类能够扫描到该类Bean对象

2.地址簿列表:

地址簿新增成功在**我的地址**中查询

请求路径:GET /customer/consumer/address-book/page

请求、响应参数:

AddressBookController:

java 复制代码
@ApiOperation("地址薄分页查询")
@GetMapping("/page")
public PageResult<AddressBookResDTO> page(AddressBookPageQueryReqDTO addressBookPageQueryReqDTO) {
    return addressBookService.page(addressBookPageQueryReqDTO);
}

IAddressBookService:

java 复制代码
/**
 * 分页查询
 *
 * @param addressBookPageQueryReqDTO 查询参数
 * @return 分页列表
 */
PageResult<AddressBookResDTO> page(AddressBookPageQueryReqDTO addressBookPageQueryReqDTO);

AddressBookServiceImpl:

java 复制代码
@Override
public PageResult<AddressBookResDTO> page(AddressBookPageQueryReqDTO addressBookPageQueryReqDTO) {
    
    //设置分页参数
    Page<AddressBook> page = PageUtils.parsePageQuery(addressBookPageQueryReqDTO, AddressBook.class);

    //设置查询条件
    LambdaQueryWrapper<AddressBook> wrapper =
            Wrappers.<AddressBook>lambdaQuery().eq(AddressBook::getUserId, UserContext.currentUserId());
    
    //分页查询
    Page<AddressBook> serveTypePage = baseMapper.selectPage(page, wrapper);

    return PageUtils.toPage(serveTypePage, AddressBookResDTO.class);
}

效果展示:

3.地址簿详情:

进入我的地址页面,首先要根据地址的id查询地址详细信息

请求路径:GET /customer/consumer/address-book/{id}

请求、响应参数:

AddressBookController:

java 复制代码
@ApiOperation("地址薄详情")
@GetMapping("/{id}")
public AddressBookResDTO detail(@PathVariable("id") Long id) {
    AddressBook addressBook = addressBookService.getById(id);
    return BeanUtil.toBean(addressBook, AddressBookResDTO.class);
}

这里的toBean方法用于将AddressBook的属性拷贝到AddressBookResDTO类当中

效果展示:

4.地址簿编辑:

在编辑页面修改内容,点击确定完成编辑

请求路径:PUT /customer/consumer/address-book/{id}

请求、响应参数:

AddressBookController:

java 复制代码
@ApiOperation("地址薄修改")
@PutMapping("/{id}")
public void update(@PathVariable("id") Long id, @RequestBody AddressBookUpsertReqDTO addressBookUpsertReqDTO) {
    addressBookService.updateAddressBook(id, addressBookUpsertReqDTO);
}

IAddressBookService:

java 复制代码
/**
 * 修改地址簿
 *
 * @param id 主键
 * @param addressBookUpsertReqDTO 修改内容
 */
void updateAddressBook(Long id, AddressBookUpsertReqDTO addressBookUpsertReqDTO);

AddressBookServiceImpl:

java 复制代码
@Override
@Transactional
public void updateAddressBook(Long id, AddressBookUpsertReqDTO addressBookUpsertReqDTO) {
    //1. 如果新增地址设为默认,则将当前用户的其它地址设置为非默认
    if (1 == addressBookUpsertReqDTO.getIsDefault()) {
        this.lambdaUpdate().set(AddressBook::getIsDefault, 0)
                .eq(AddressBook::getUserId, UserContext.currentUserId())
                .update();
    }

    //2. 拷贝赋值
    AddressBook addressBook = BeanUtil.toBean(addressBookUpsertReqDTO, AddressBook.class);
    addressBook.setId(id);

    //3. 如果请求体中没有经纬度,则调用第三方api根据详细地址获取经纬度
    if (ObjectUtil.isEmpty(addressBookUpsertReqDTO.getLocation())) {
        //组装详细地址
        String completeAddress = addressBookUpsertReqDTO.getProvince() +
                addressBookUpsertReqDTO.getCity() +
                addressBookUpsertReqDTO.getCounty() +
                addressBookUpsertReqDTO.getAddress();
        //远程请求高德获取经纬度
        LocationResDTO locationDto = mapApi.getLocationByAddress(completeAddress);
        //经纬度(字符串格式:经度,纬度),经度在前,纬度在后
        String location = locationDto.getLocation();
        addressBookUpsertReqDTO.setLocation(location);
    }

    if (StringUtils.isNotEmpty(addressBookUpsertReqDTO.getLocation())) {
        // 经度
        addressBook.setLon(NumberUtils.parseDouble(addressBookUpsertReqDTO.getLocation().split(",")[0]));
        // 纬度
        addressBook.setLat(NumberUtils.parseDouble(addressBookUpsertReqDTO.getLocation().split(",")[1]));
    }

    //4. 执行修改
    baseMapper.updateById(addressBook);
}

效果展示:

5.地址簿删除:

进入我的地址页面,点击"删除"对地址簿进行删除,批量删除也走此接口

请求路径:DELETE /customer/consumer/address-book/batch

请求、响应参数:

AddressBookController:

java 复制代码
@ApiOperation("地址薄批量删除")
@DeleteMapping("/batch")
public void logicallyDelete(@RequestBody List<Long> ids) {
    addressBookService.removeByIds(ids);
}

6.设置默认地址:

进入我的地址,点击默认地址将当前地址设置为默认地址

注意:默认地址一个用户只能有一个,如果设置新地址为默认地址,则需要取消旧的默认地址

请求路径:PUT /customer/consumer/address-book/default

请求、响应参数:

AddressBookController:

java 复制代码
@ApiOperation("地址薄设为默认/取消默认")
@PutMapping("/default")
public void updateDefaultStatus(Long id, Integer flag) {
    addressBookService.updateDefaultStatus(id, flag);
}

IAddressBookService:

java 复制代码
/**
 * 地址薄设为默认/取消默认
 * @param id 主键
 * @param flag 默认/取消默认
 */
void updateDefaultStatus(Long id, Integer flag);

AddressBookServiceImpl:

java 复制代码
@Transactional(rollbackFor = Exception.class)
@Override
public void updateDefaultStatus(Long id, Integer flag) {
    //如果设默认地址,先把其他地址取消默认
    if (1 == flag) {
        this.lambdaUpdate().set(AddressBook::getIsDefault, 0)
                .eq(AddressBook::getUserId, UserContext.currentUserId())
                .update();
    }

    //2. 修改
    AddressBook addressBook = new AddressBook();
    addressBook.setId(id);
    addressBook.setIsDefault(flag);
    getBaseMapper().updateById(addressBook);
}

效果展示:

三、代码提交:

相关推荐
2501_9151063224 分钟前
iOS 抓不到包怎么办?从 HTTPS 代理排查到 TCP 数据流捕获的全链路解决方案
android·tcp/ip·ios·小程序·https·uni-app·iphone
游戏开发爱好者825 分钟前
APP上架苹果应用商店经验教训与注意事项
android·ios·小程序·https·uni-app·iphone·webview
hyswl6662 小时前
数字货物搬家小程序
python·小程序
郭俊强3 小时前
小程序RSA、AES加密
小程序
Dest1ny-安全3 小时前
CTF入门:国内线上CTF比赛时间及部分题目资源
网络·安全·web安全·微信小程序·php
2501_916007474 小时前
苹果应用商店上架的系统逻辑,从产品开发到使用 开心上架 上架IPA 交付审核流程
android·ios·小程序·https·uni-app·iphone·webview
kyh10033811205 小时前
去水印微信小程序搭建
大数据·微信小程序·去水印·短视频去水印·去水印微信小程序
2501_916008895 小时前
Python抓包HTTPS详解:Wireshark、Fiddler、Charles等工具使用教程
python·ios·小程序·https·uni-app·wireshark·iphone
刻刻帝的海角5 小时前
uniapp引入qqmap-wx-jssdk实现微信小程序端获取用户当前位置
微信小程序·小程序·uni-app
2501_916008896 小时前
uni-app 上架到 App Store 的项目流程,构建、打包与使用开心上架(Appuploader)上传
android·ios·小程序·https·uni-app·iphone·webview