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

目录

一、全部服务:

二、实战:

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);
}

效果展示:

三、代码提交:

相关推荐
AI源码13 小时前
在线考试小程序
小程序·notepad++
计算机毕设定制辅导-无忧学长13 小时前
《基于微信小程序健康习惯激励系统设计与实现》
java·spring boot·mysql·微信小程序·uniapp·健康习惯激励系统
2501_9160088916 小时前
iPhone 设备信息查看,用 KeyMob 看型号、序列号、电池健康和 UDID
android·ios·小程序·https·uni-app·iphone·webview
拖孩1 天前
流量主门槛从 500 降到 100,我的小程序上线 18 小时够到了线
前端·后端·微信小程序
云-缩影2 天前
做微信小程序,自建服务器还是用云托管:技术选型对比
服务器·微信小程序·小程序
极限挑战哥2 天前
共享电单车联营平台分账架构实践:二清合规与自动分账零人工方案
java·大数据·人工智能·微信小程序·架构·微信公众平台
超级新零售3 天前
服装订货会数字化:商品版本、订单状态与后续配发数据如何衔接?
大数据·小程序·企业微信
云-缩影3 天前
拆解微信小程序后端架构:ECS、RDS、SSL 和 VPC 怎么配合
微信小程序·架构·ssl
拖孩3 天前
AI 帮我写的小程序上线 44 天:36 个人进了收银台,8 个人付钱
前端·后端·微信小程序