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

目录

一、全部服务:

二、实战:

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

效果展示:

三、代码提交:

相关推荐
一 乐12 小时前
点餐|智能点餐系统|基于java+ Springboot的动端的点餐系统小程序(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·小程序·论文
全栈软件开发21 小时前
新版点微同城主题源码34.7+全套插件+小程序前后端 源文件
小程序
毕设源码-朱学姐21 小时前
【开题答辩全过程】以 基于java的民宿管理小程序为例,包含答辩的问题和答案
java·开发语言·小程序
dcloud_jibinbin1 天前
【uniapp】解决小程序分包下的json文件编译后生成到主包的问题
前端·性能优化·微信小程序·uni-app·vue·json
shykevin1 天前
uni-app x开发商城系统,小程序发布,h5发布,安卓打包
android·小程序·uni-app
说私域1 天前
社群经济下开源链动2+1模式AI智能名片S2B2C商城小程序的信任重构机制研究
人工智能·小程序·重构
说私域1 天前
开源AI智能名片链动2+1模式S2B2C商城小程序FAQ设计及其意义探究
人工智能·小程序
小小王app小程序开发1 天前
短剧小程序 2025 核心痛点分析:内容、技术与合规的三重困境
小程序
fthux2 天前
孩子的名字有救了
微信小程序·typescript·ai编程