app地址管理

This commit is contained in:
PQZ 2025-04-03 11:46:51 +08:00
parent 50065a8496
commit 45c8ddfcb6
6 changed files with 200 additions and 28 deletions

View File

@ -18,11 +18,21 @@ public interface IBaseCityService extends IService<BaseCity> {
IPage<BaseCity> queryListPage(BaseCity pageReqVO, Page<BaseCity> page);
/**
* 查询树列表
* 递归查询树列表
*
* @return java.util.List<com.ruoyi.base.vo.BaseCityVO>
* @author PQZ
* @date 15:12 2025/4/2
**/
List<BaseCityVO> treeCity();
/**
* 逆递归查询树结构
*
* @param cityId 最子集城市id
* @return java.lang.String
* @author PQZ
* @date 10:25 2025/4/3
**/
String getCityName(Long cityId);
}

View File

@ -42,9 +42,7 @@ public class BaseCityServiceImpl extends ServiceImpl<BaseCityMapper, BaseCity> i
**/
@Override
public List<BaseCityVO> treeCity() {
LambdaQueryWrapper<BaseCity> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(BaseCity::getIsShow, 1);
List<BaseCity> list = list(lambdaQueryWrapper);
List<BaseCity> list = listCity();
return buildCityTree(list);
}
@ -79,4 +77,72 @@ public class BaseCityServiceImpl extends ServiceImpl<BaseCityMapper, BaseCity> i
}
return tree;
}
/**
* 逆递归查询树结构
*
* @param cityId 最子集城市id
* @return java.lang.String
* @author PQZ
* @date 10:25 2025/4/3
**/
@Override
public String getCityName(Long cityId) {
List<BaseCity> list = listCity();
StringBuilder nameBuilder = new StringBuilder();
reverseRecursion(cityId, nameBuilder, list);
return nameBuilder.toString();
}
/**
* 逆递归拼接字符串
*
* @param cityId 城市id
* @param nameBuilder 字符串
* @param list 城市集合
* @author PQZ
* @date 10:45 2025/4/3
**/
private void reverseRecursion(Long cityId, StringBuilder nameBuilder, List<BaseCity> list) {
BaseCity city = findCityById(cityId, list);
if (city != null) {
// 添加当前城市名称
nameBuilder.insert(0, city.getName());
// 继续向上查找父级城市
reverseRecursion(city.getParentId(),nameBuilder,list);
}
}
/**
* 取出城市名称
*
* @param cityId 城市id
* @param list 城市集合
* @return com.ruoyi.base.domain.BaseCity
* @author PQZ
* @date 10:43 2025/4/3
**/
private BaseCity findCityById(Long cityId, List<BaseCity> list) {
for (BaseCity city : list) {
if (city.getCityId().equals(cityId)) {
return city;
}
}
return null;
}
/**
* 查询树列表
*
* @return java.util.List<com.ruoyi.base.domain.BaseCity>
* @author PQZ
* @date 10:39 2025/4/3
**/
private List<BaseCity> listCity() {
LambdaQueryWrapper<BaseCity> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(BaseCity::getIsShow, 1);
return list(lambdaQueryWrapper);
}
}

View File

@ -51,13 +51,13 @@ public class MemberAddressController extends BaseController {
* @author PQZ
* @date 10:43 2025/3/29
**/
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") String id) {
@GetMapping(value = "/getById")
public AjaxResult getInfo(@RequestParam("id") String id) {
return success(memberAddressService.getById(id));
}
/**
* 新增博主收货地址
* 保存博主收货地址
*
* @param memberAddress {@link MemberAddress}
* @return com.ruoyi.common.core.domain.AjaxResult
@ -65,37 +65,39 @@ public class MemberAddressController extends BaseController {
* @date 10:43 2025/3/29
**/
@Log(title = "博主收货地址", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody MemberAddress memberAddress) {
return toAjax(memberAddressService.save(memberAddress));
@PostMapping("/save")
public AjaxResult save(@RequestBody MemberAddress memberAddress) {
memberAddressService.saveMemberAddress(memberAddress);
return success();
}
/**
* 修改博主收货地址
* 设置默认收货地址
*
* @param memberAddress {@link MemberAddress}
* @param id 收货地址id
* @return com.ruoyi.common.core.domain.AjaxResult
* @author PQZ
* @date 10:44 2025/3/29
* @date 11:10 2025/4/3
**/
@Log(title = "博主收货地址", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody MemberAddress memberAddress) {
return toAjax(memberAddressService.updateById(memberAddress));
@GetMapping("/setDefault")
public AjaxResult setDefault(@RequestParam("id") String id) {
memberAddressService.setDefault(id);
return success();
}
/**
* 删除博主收货地址
*
* @param ids id
* @param id id
* @return com.ruoyi.common.core.domain.AjaxResult
* @author PQZ
* @date 10:45 2025/3/29
**/
@Log(title = "博主收货地址", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids) {
List<String> list = new ArrayList<>(Arrays.asList(ids));
return toAjax(memberAddressService.removeByIds(list));
@DeleteMapping("/remove")
public AjaxResult remove(@RequestParam("id") String id) {
memberAddressService.removeById(id);
return success();
}
}

View File

@ -40,9 +40,13 @@ public class MemberAddress extends DlBaseEntity
@Excel(name = "收件人名称")
private String name;
/** 省 市 区 */
/** 省 市 区 id*/
@Excel(name = "省 市 区")
private String city;
private Long cityId;
/** 省 市 区 名字 */
@Excel(name = "省 市 区")
private String cityName;
/** 详细地址 */
@Excel(name = "详细地址")

View File

@ -23,4 +23,22 @@ public interface IMemberAddressService extends IService<MemberAddress> {
**/
List<MemberAddress> listByUserId(Long userId);
/**
* 保存博主地址信息
*
* @param address {@link MemberAddress}
* @author PQZ
* @date 10:12 2025/4/3
**/
void saveMemberAddress(MemberAddress address);
/**
* 设置地址为默认地址
*
* @param id id
* @author PQZ
* @date 11:07 2025/4/3
**/
void setDefault(String id);
}

View File

@ -2,26 +2,31 @@ package com.ruoyi.member.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.base.service.IBaseCityService;
import com.ruoyi.common.core.domain.DlBaseEntity;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.member.domain.MemberAddress;
import com.ruoyi.member.mapper.MemberAddressMapper;
import com.ruoyi.member.service.IMemberAddressService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
* 博主收货地址Service业务层处理
*
*
* @author pqz
* @date 2025-03-17
*/
@Service
public class MemberAddressServiceImpl extends ServiceImpl<MemberAddressMapper,MemberAddress> implements IMemberAddressService
{
public class MemberAddressServiceImpl extends ServiceImpl<MemberAddressMapper, MemberAddress> implements IMemberAddressService {
@Autowired
private MemberAddressMapper memberAddressMapper;
@Resource
private IBaseCityService cityService;
/**
@ -35,7 +40,74 @@ public class MemberAddressServiceImpl extends ServiceImpl<MemberAddressMapper,Me
@Override
public List<MemberAddress> listByUserId(Long userId) {
LambdaQueryWrapper<MemberAddress> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(DlBaseEntity::getDelFlag,0).eq(MemberAddress::getUserId,userId);
lambdaQueryWrapper.eq(DlBaseEntity::getDelFlag, 0)
.eq(MemberAddress::getUserId, userId)
.orderByDesc(MemberAddress::getIsDefault)
.orderByDesc(DlBaseEntity::getCreateTime);
return list(lambdaQueryWrapper);
}
/**
* 保存博主地址信息
*
* @param address {@link MemberAddress}
* @author PQZ
* @date 10:12 2025/4/3
**/
@Override
@Transactional(rollbackFor = Exception.class)
public void saveMemberAddress(MemberAddress address) {
Long userId = SecurityUtils.getUserId();
address.setUserId(userId);
if (address.getCityId() != null) {
String cityName = cityService.getCityName(address.getCityId());
address.setCityName(cityName);
}
//默认地址情况需要修改原来的默认地址为不默认
if ("1".equals(address.getIsDefault())) {
updateIsDefault(userId);
}
//保存
saveOrUpdate(address);
}
/**
* 设置地址为默认地址
*
* @param id id
* @author PQZ
* @date 11:07 2025/4/3
**/
@Override
public void setDefault(String id) {
MemberAddress address = getById(id);
//修改原有地址的默认状态
updateIsDefault(address.getUserId());
//设置现有地址默认状态
address.setIsDefault("1");
updateById(address);
}
/**
* 修改原有地址的默认状态
*
* @param userId 用户id
* @author PQZ
* @date 10:15 2025/4/3
**/
private void updateIsDefault(Long userId) {
LambdaQueryWrapper<MemberAddress> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper
.eq(MemberAddress::getIsDefault, "1")
.eq(DlBaseEntity::getDelFlag, 0)
.eq(MemberAddress::getUserId, userId);
List<MemberAddress> list = list(lambdaQueryWrapper);
//存在默认地址情况更新为非默认状态
if (!list.isEmpty()) {
list.forEach(item -> {
item.setIsDefault("0");
});
updateBatchById(list);
}
}
}