目录
一、全部服务:
请求路径: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.新增地址簿:
点击小程序底栏的我的--我的地址--新增地址,然后依次填写内容,保存地址簿,注意:
-
默认地址一个用户只能有一个,如果设置新地址为默认地址,则需要取消旧的默认地址
-
如果前端没有传递经纬度,则需要根据传递的详细地址调用高德地图获取经纬度(相关接口已经提供)

请求路径: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);
}
效果展示:

三、代码提交:
