feat(customer):新增客户端设置地址的相关功能(CRUD+设置默认)
This commit is contained in:
parent
2a8830feb7
commit
d62a73d0ed
@ -0,0 +1,84 @@
|
||||
package com.jzo2o.customer.controller.consumer;
|
||||
|
||||
import com.jzo2o.common.expcetions.ForbiddenOperationException;
|
||||
import com.jzo2o.common.model.PageResult;
|
||||
import com.jzo2o.customer.enums.AddressDefaultStatusEnum;
|
||||
import com.jzo2o.customer.model.domain.AddressBook;
|
||||
import com.jzo2o.customer.model.dto.request.AddressBookPageQueryReqDTO;
|
||||
import com.jzo2o.customer.model.dto.request.AddressBookUpsertReqDTO;
|
||||
import com.jzo2o.customer.service.IAddressBookService;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author JIAN
|
||||
*/
|
||||
@RestController("consumerAddressBookController")
|
||||
@RequestMapping("/consumer/address-book")
|
||||
@Api(tags = "用户端 - 地址簿相关接口")
|
||||
public class AddressBookController {
|
||||
@Resource
|
||||
private IAddressBookService addressBookService;
|
||||
|
||||
/**
|
||||
* 增加地址信息
|
||||
*/
|
||||
@PostMapping
|
||||
public void add(@RequestBody AddressBookUpsertReqDTO addressBookUpsertReqDTO) {
|
||||
addressBookService.insert(addressBookUpsertReqDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询地址信息
|
||||
*/
|
||||
@GetMapping("/page")
|
||||
public PageResult<AddressBook> page(AddressBookPageQueryReqDTO addressBookPageQueryReqDTO) {
|
||||
return addressBookService.page(addressBookPageQueryReqDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询指定id的地址信息(展示详情)
|
||||
*/
|
||||
@GetMapping("/{id}")
|
||||
public AddressBook getById(@PathVariable Long id) {
|
||||
return addressBookService.getById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更改指定id的地址信息(修改地址)
|
||||
*/
|
||||
@PutMapping("/{id}")
|
||||
public void updateById(@PathVariable Long id,
|
||||
@RequestBody AddressBookUpsertReqDTO addressBookUpsertReqDTO) {
|
||||
addressBookService.updateById(id, addressBookUpsertReqDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除指定id的地址信息(逻辑删除)
|
||||
*/
|
||||
@DeleteMapping("/batch")
|
||||
public void deleteBatch(@RequestBody List<Long> ids) {
|
||||
addressBookService.removeByIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置默认地址
|
||||
*/
|
||||
@PutMapping("/default")
|
||||
public void updateDefault(@RequestParam Long id, @RequestParam int flag) {
|
||||
if (flag != AddressDefaultStatusEnum.DEFAULT.getStatus()
|
||||
&& flag != AddressDefaultStatusEnum.NONE_DEFAULT.getStatus()) {
|
||||
throw new ForbiddenOperationException("设置的参数有误拒绝请求");
|
||||
}
|
||||
|
||||
addressBookService.updateDefault(id, flag);
|
||||
}
|
||||
|
||||
@GetMapping("/defaultAddress")
|
||||
public AddressBook getDefaultAddress() {
|
||||
return addressBookService.getDefaultAddress();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
package com.jzo2o.customer.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 描述用户地址的默认状态
|
||||
* @author JIAN
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum AddressDefaultStatusEnum {
|
||||
DEFAULT(1), NONE_DEFAULT(0);
|
||||
private final int status;
|
||||
}
|
||||
@ -1,13 +1,14 @@
|
||||
package com.jzo2o.customer.model.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.io.Serializable;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 地址薄
|
||||
@ -17,6 +18,7 @@ import lombok.experimental.Accessors;
|
||||
* @since 2023-07-06
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@TableName("address_book")
|
||||
@ -83,6 +85,7 @@ public class AddressBook implements Serializable {
|
||||
/**
|
||||
* 是否已删除,0:未删除,1:已删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Integer isDeleted;
|
||||
|
||||
/**
|
||||
@ -106,6 +109,4 @@ public class AddressBook implements Serializable {
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Long updateBy;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,11 +1,11 @@
|
||||
package com.jzo2o.customer.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.jzo2o.api.customer.dto.response.AddressBookResDTO;
|
||||
import com.jzo2o.common.model.PageResult;
|
||||
import com.jzo2o.customer.model.domain.AddressBook;
|
||||
import com.jzo2o.customer.model.dto.request.AddressBookPageQueryReqDTO;
|
||||
import com.jzo2o.customer.model.dto.request.AddressBookUpsertReqDTO;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -13,7 +13,6 @@ import java.util.List;
|
||||
* <p>
|
||||
* 地址薄 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author itcast
|
||||
* @since 2023-07-06
|
||||
*/
|
||||
@ -21,10 +20,34 @@ public interface IAddressBookService extends IService<AddressBook> {
|
||||
|
||||
/**
|
||||
* 根据用户id和城市编码获取地址
|
||||
*
|
||||
* @param userId 用户id
|
||||
* @param userId 用户id
|
||||
* @param cityCode 城市编码
|
||||
* @return 地址编码
|
||||
*/
|
||||
List<AddressBookResDTO> getByUserIdAndCity(Long userId, String cityCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 增加地址信息
|
||||
*/
|
||||
void insert(AddressBookUpsertReqDTO addressBookUpsertReqDTO);
|
||||
|
||||
/**
|
||||
* 查询地址信息
|
||||
*/
|
||||
PageResult<AddressBook> page(AddressBookPageQueryReqDTO addressBookPageQueryReqDTO);
|
||||
|
||||
/**
|
||||
* 修改地址信息
|
||||
*/
|
||||
void updateById(Long id, AddressBookUpsertReqDTO addressBookUpsertReqDTO);
|
||||
|
||||
/**
|
||||
* 修改默认地址
|
||||
*/
|
||||
void updateDefault(Long id, int flag);
|
||||
|
||||
/**
|
||||
* 获取用户默认地址
|
||||
*/
|
||||
AddressBook getDefaultAddress();
|
||||
}
|
||||
@ -1,31 +1,28 @@
|
||||
package com.jzo2o.customer.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.jzo2o.api.customer.dto.response.AddressBookResDTO;
|
||||
import com.jzo2o.api.publics.MapApi;
|
||||
import com.jzo2o.api.publics.dto.response.LocationResDTO;
|
||||
import com.jzo2o.common.expcetions.CommonException;
|
||||
import com.jzo2o.common.expcetions.ServerErrorException;
|
||||
import com.jzo2o.common.model.PageResult;
|
||||
import com.jzo2o.customer.enums.AddressDefaultStatusEnum;
|
||||
import com.jzo2o.common.handler.UserInfoHandler;
|
||||
import com.jzo2o.common.model.CurrentUserInfo;
|
||||
import com.jzo2o.common.utils.BeanUtils;
|
||||
import com.jzo2o.common.utils.CollUtils;
|
||||
import com.jzo2o.common.utils.NumberUtils;
|
||||
import com.jzo2o.common.utils.StringUtils;
|
||||
import com.jzo2o.common.utils.ObjectUtils;
|
||||
import com.jzo2o.customer.mapper.AddressBookMapper;
|
||||
import com.jzo2o.customer.model.domain.AddressBook;
|
||||
import com.jzo2o.customer.model.dto.request.AddressBookPageQueryReqDTO;
|
||||
import com.jzo2o.customer.model.dto.request.AddressBookUpsertReqDTO;
|
||||
import com.jzo2o.customer.service.IAddressBookService;
|
||||
import com.jzo2o.mvc.utils.UserContext;
|
||||
import com.jzo2o.mysql.utils.PageUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ -33,12 +30,32 @@ import java.util.List;
|
||||
* <p>
|
||||
* 地址薄 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author itcast
|
||||
* @since 2023-07-06
|
||||
*/
|
||||
@Service
|
||||
public class AddressBookServiceImpl extends ServiceImpl<AddressBookMapper, AddressBook> implements IAddressBookService {
|
||||
/**
|
||||
* 获取当前用户id
|
||||
*/
|
||||
private final UserInfoHandler userInfoHandler;
|
||||
|
||||
public AddressBookServiceImpl(UserInfoHandler userInfoHandler) {
|
||||
this.userInfoHandler = userInfoHandler;
|
||||
}
|
||||
|
||||
private Long currentUserId() {
|
||||
if (ObjectUtils.isEmpty(userInfoHandler)) {
|
||||
throw new ServerErrorException("不能获取当前用户信息获取地址失败");
|
||||
} else {
|
||||
CurrentUserInfo currentUserInfo = userInfoHandler.currentUserInfo();
|
||||
if (ObjectUtils.isEmpty(currentUserInfo)) {
|
||||
throw new ServerErrorException("不能获取当前用户信息获取地址失败");
|
||||
} else {
|
||||
return currentUserInfo.getId();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AddressBookResDTO> getByUserIdAndCity(Long userId, String city) {
|
||||
@ -47,9 +64,106 @@ public class AddressBookServiceImpl extends ServiceImpl<AddressBookMapper, Addre
|
||||
.eq(AddressBook::getUserId, userId)
|
||||
.eq(AddressBook::getCity, city)
|
||||
.list();
|
||||
if(CollUtils.isEmpty(addressBooks)) {
|
||||
if (CollUtils.isEmpty(addressBooks)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return BeanUtils.copyToList(addressBooks, AddressBookResDTO.class);
|
||||
}
|
||||
}
|
||||
|
||||
private AddressBook getAddressBookByUpsertReqDTO(AddressBookUpsertReqDTO addressBookUpsertReqDTO) {
|
||||
// 解析经纬度
|
||||
String location = addressBookUpsertReqDTO.getLocation();
|
||||
Double lon = null, lat = null;
|
||||
if (!ObjectUtils.isEmpty(location)) {
|
||||
String[] pos = location.split(",");
|
||||
if (pos.length == 2) {
|
||||
lon = Double.parseDouble(pos[0]);
|
||||
lat = Double.parseDouble(pos[1]);
|
||||
}
|
||||
}
|
||||
|
||||
// 构建AddressBook实体
|
||||
return AddressBook.builder()
|
||||
.userId(currentUserId())
|
||||
.name(addressBookUpsertReqDTO.getName())
|
||||
.phone(addressBookUpsertReqDTO.getPhone())
|
||||
.province(addressBookUpsertReqDTO.getProvince())
|
||||
.city(addressBookUpsertReqDTO.getCity())
|
||||
.county(addressBookUpsertReqDTO.getCounty())
|
||||
.address(addressBookUpsertReqDTO.getAddress())
|
||||
.isDefault(addressBookUpsertReqDTO.getIsDefault())
|
||||
.lon(lon).lat(lat).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void insert(AddressBookUpsertReqDTO addressBookUpsertReqDTO) {
|
||||
// 取消其他默认地址
|
||||
if (addressBookUpsertReqDTO.getIsDefault() == AddressDefaultStatusEnum.DEFAULT.getStatus()) {
|
||||
lambdaUpdate()
|
||||
.eq(AddressBook::getUserId, currentUserId())
|
||||
.eq(AddressBook::getIsDefault, AddressDefaultStatusEnum.DEFAULT.getStatus())
|
||||
.set(AddressBook::getIsDefault, AddressDefaultStatusEnum.NONE_DEFAULT.getStatus())
|
||||
.update();
|
||||
}
|
||||
|
||||
baseMapper.insert(getAddressBookByUpsertReqDTO(addressBookUpsertReqDTO));
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<AddressBook> page(AddressBookPageQueryReqDTO addressBookPageQueryReqDTO) {
|
||||
Long userId = currentUserId();
|
||||
|
||||
// mybatis-plus会自动筛选逻辑删除的字段
|
||||
LambdaQueryWrapper<AddressBook> queryWrapper = Wrappers.<AddressBook>lambdaQuery()
|
||||
.eq(AddressBook::getUserId, userId);
|
||||
Page<AddressBook> page = PageUtils.parsePageQuery(addressBookPageQueryReqDTO, AddressBook.class);
|
||||
|
||||
Page<AddressBook> addressBookPage = baseMapper.selectPage(page, queryWrapper);
|
||||
return new PageResult<>(addressBookPage.getPages(), addressBookPage.getTotal(), addressBookPage.getRecords());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void updateById(Long id, AddressBookUpsertReqDTO addressBookUpsertReqDTO) {
|
||||
AddressBook addressBook = baseMapper.selectById(id);
|
||||
if (ObjectUtils.isEmpty(addressBook)) {
|
||||
throw new CommonException("地址id不存在无法更新");
|
||||
}
|
||||
|
||||
addressBook = getAddressBookByUpsertReqDTO(addressBookUpsertReqDTO);
|
||||
addressBook.setId(id);
|
||||
|
||||
baseMapper.updateById(addressBook);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void updateDefault(Long id, int flag) {
|
||||
AddressBook addressBook = baseMapper.selectById(id);
|
||||
if (ObjectUtils.isEmpty(addressBook)) {
|
||||
throw new CommonException("地址id不存在无法更新");
|
||||
}
|
||||
|
||||
// 取消原有默认地址
|
||||
lambdaUpdate()
|
||||
.eq(AddressBook::getUserId, currentUserId())
|
||||
.eq(AddressBook::getIsDefault, AddressDefaultStatusEnum.DEFAULT.getStatus())
|
||||
.set(AddressBook::getIsDefault, AddressDefaultStatusEnum.NONE_DEFAULT.getStatus())
|
||||
.update();
|
||||
|
||||
// 设置指定id为默认地址
|
||||
lambdaUpdate()
|
||||
.eq(AddressBook::getId, id)
|
||||
.set(AddressBook::getIsDefault, AddressDefaultStatusEnum.DEFAULT.getStatus())
|
||||
.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AddressBook getDefaultAddress() {
|
||||
return lambdaQuery()
|
||||
.eq(AddressBook::getUserId, currentUserId())
|
||||
.eq(AddressBook::getIsDefault, AddressDefaultStatusEnum.DEFAULT.getStatus())
|
||||
.one();
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user