单位楼栋

This commit is contained in:
zjf committed 2026-03-30 18:59:22 +08:00
1 parent a42caa090e
commit efdd049ce9
13 files changed
+690

No files matched your search

@@ -0,0 +1,12 @@
package com.bsd.pjcloud.admin.api.dto.address;
import com.bsd.pjcloud.admin.api.entity.address.SysDeptBuildingEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "单位楼栋")
public class SysDeptBuildingDto extends SysDeptBuildingEntity {
}
@@ -0,0 +1,12 @@
package com.bsd.pjcloud.admin.api.dto.address;
import com.bsd.pjcloud.admin.api.entity.address.SysUserAddressEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "用户配送地址")
public class SysUserAddressDto extends SysUserAddressEntity {
}
@@ -0,0 +1,63 @@
package com.bsd.pjcloud.admin.api.entity.address;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.bsd.pjcloud.common.core.util.TenantTable;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 单位(部门)下楼栋,后台维护,前端下拉
*/
@Data
@TenantTable
@TableName("sys_dept_building")
@EqualsAndHashCode(callSuper = true)
@Schema(description = "单位楼栋")
public class SysDeptBuildingEntity extends Model<SysDeptBuildingEntity> {
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private Long id;
@NotNull(message = "单位不能为空")
@Schema(description = "单位/部门ID")
private Long deptId;
@NotBlank(message = "楼栋名称不能为空")
@Schema(description = "楼栋名称")
private String buildingName;
@NotNull(message = "排序不能为空")
@Schema(description = "排序")
private Integer sortOrder;
@TableField(fill = FieldFill.INSERT)
@Schema(description = "创建人")
private String createBy;
@TableField(fill = FieldFill.INSERT)
@Schema(description = "创建时间")
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description = "修改人")
private String updateBy;
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description = "修改时间")
private LocalDateTime updateTime;
@TableLogic
@TableField(fill = FieldFill.INSERT)
@Schema(description = "删除标记")
private String delFlag;
@Schema(description = "租户ID")
private Long tenantId;
}
@@ -0,0 +1,72 @@
package com.bsd.pjcloud.admin.api.entity.address;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.bsd.pjcloud.common.core.util.TenantTable;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 用户配送地址:单位(部门)+楼栋+房间号,可多条、一条默认
*/
@Data
@TenantTable
@TableName("sys_user_address")
@EqualsAndHashCode(callSuper = true)
@Schema(description = "用户配送地址")
public class SysUserAddressEntity extends Model<SysUserAddressEntity> {
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private Long id;
@Schema(description = "用户ID(服务端写入,客户端不必传)")
private Long userId;
@NotNull(message = "单位不能为空")
@Schema(description = "单位/部门ID")
private Long deptId;
@NotNull(message = "楼栋不能为空")
@Schema(description = "楼栋ID")
private Long buildingId;
@NotBlank(message = "房间号不能为空")
@Schema(description = "房间号")
private String roomNo;
@Schema(description = "地址标签")
private String addressLabel;
@Schema(description = "是否默认 1是 0否")
private String isDefault;
@TableField(fill = FieldFill.INSERT)
@Schema(description = "创建人")
private String createBy;
@TableField(fill = FieldFill.INSERT)
@Schema(description = "创建时间")
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description = "修改人")
private String updateBy;
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description = "修改时间")
private LocalDateTime updateTime;
@TableLogic
@TableField(fill = FieldFill.INSERT)
@Schema(description = "删除标记")
private String delFlag;
@Schema(description = "租户ID")
private Long tenantId;
}
@@ -0,0 +1,44 @@
package com.bsd.pjcloud.admin.api.vo.address;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
* 用户配送地址(含单位名、楼栋名与拼接展示)
*/
@Data
@Schema(description = "用户配送地址VO")
public class SysUserAddressVo implements Serializable {
@Schema(description = "主键")
private Long id;
@Schema(description = "用户ID")
private Long userId;
@Schema(description = "单位/部门ID")
private Long deptId;
@Schema(description = "单位名称(部门名称)")
private String deptName;
@Schema(description = "楼栋ID")
private Long buildingId;
@Schema(description = "楼栋名称")
private String buildingName;
@Schema(description = "房间号")
private String roomNo;
@Schema(description = "地址标签")
private String addressLabel;
@Schema(description = "是否默认 1是 0否")
private String isDefault;
@Schema(description = "完整展示:单位+楼栋+房间号")
private String fullAddress;
}
@@ -0,0 +1,84 @@
package com.bsd.pjcloud.admin.controller.address;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.admin.api.dto.address.SysDeptBuildingDto;
import com.bsd.pjcloud.admin.api.entity.address.SysDeptBuildingEntity;
import com.bsd.pjcloud.admin.service.SysDeptBuildingService;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.log.annotation.SysLog;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.HttpHeaders;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 单位(部门)下楼栋维护,供订餐选址楼栋下拉
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/sysDeptBuilding")
@Tag(name = "单位楼栋管理")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class SysDeptBuildingController {
private final SysDeptBuildingService sysDeptBuildingService;
/**
* 按单位查询楼栋(下单/维护地址时下拉;登录即可)
*/
@GetMapping("/list-by-dept")
@Operation(summary = "按单位ID查询楼栋列表")
public R<List<SysDeptBuildingEntity>> listByDept(@RequestParam("deptId") Long deptId) {
return R.ok(sysDeptBuildingService.listByDeptId(deptId));
}
@GetMapping("/page")
@Operation(summary = "分页查询单位楼栋(管理端)")
@PreAuthorize("@pms.hasPermission('admin_sysDeptBuilding_view')")
public R<Page<SysDeptBuildingEntity>> page(@ParameterObject Page<SysDeptBuildingEntity> page,
@RequestParam(value = "deptId", required = false) Long deptId) {
return R.ok(sysDeptBuildingService.page(page, Wrappers.<SysDeptBuildingEntity>lambdaQuery()
.eq(deptId != null, SysDeptBuildingEntity::getDeptId, deptId)
.orderByAsc(SysDeptBuildingEntity::getSortOrder)
.orderByAsc(SysDeptBuildingEntity::getId)));
}
@GetMapping("/{id}")
@Operation(summary = "楼栋详情")
@PreAuthorize("@pms.hasPermission('admin_sysDeptBuilding_view')")
public R<SysDeptBuildingEntity> getById(@PathVariable Long id) {
return R.ok(sysDeptBuildingService.getById(id));
}
@SysLog("新增单位楼栋")
@PostMapping
@PreAuthorize("@pms.hasPermission('admin_sysDeptBuilding_add')")
public R<Long> save(@Valid @RequestBody SysDeptBuildingDto dto) {
return R.ok(sysDeptBuildingService.create(dto));
}
@SysLog("修改单位楼栋")
@PutMapping
@PreAuthorize("@pms.hasPermission('admin_sysDeptBuilding_edit')")
public R<Void> update(@Valid @RequestBody SysDeptBuildingDto dto) {
sysDeptBuildingService.edit(dto);
return R.ok();
}
@SysLog("删除单位楼栋")
@DeleteMapping
@PreAuthorize("@pms.hasPermission('admin_sysDeptBuilding_del')")
public R<Void> remove(@RequestBody Long[] ids) {
sysDeptBuildingService.removeBuildingsByIds(CollUtil.toList(ids));
return R.ok();
}
}
@@ -0,0 +1,84 @@
package com.bsd.pjcloud.admin.controller.address;
import com.bsd.pjcloud.admin.api.dto.address.SysUserAddressDto;
import com.bsd.pjcloud.admin.api.vo.address.SysUserAddressVo;
import com.bsd.pjcloud.admin.service.SysUserAddressService;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.log.annotation.SysLog;
import com.bsd.pjcloud.common.security.annotation.Inner;
import com.bsd.pjcloud.common.security.service.PjcloudUser;
import com.bsd.pjcloud.common.security.util.SecurityUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 用户配送地址:单位(部门)+楼栋+房间号,多地址与默认地址
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/sysUserAddress")
@Tag(name = "用户配送地址")
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
public class SysUserAddressController {
private final SysUserAddressService sysUserAddressService;
/* ---------- App / 当前用户 ---------- */
@GetMapping("/app/list")
@Operation(summary = "当前用户配送地址列表")
public R<List<SysUserAddressVo>> appList() {
PjcloudUser user = SecurityUtils.getUser();
return R.ok(sysUserAddressService.listVoByUserId(user.getId()));
}
@SysLog("新增用户配送地址")
@PostMapping("/app")
@Operation(summary = "新增配送地址")
public R<Long> appSave(@Valid @RequestBody SysUserAddressDto dto) {
PjcloudUser user = SecurityUtils.getUser();
return R.ok(sysUserAddressService.saveForUser(user.getId(), dto));
}
@SysLog("修改用户配送地址")
@PutMapping("/app")
@Operation(summary = "修改配送地址")
public R<Void> appUpdate(@Valid @RequestBody SysUserAddressDto dto) {
PjcloudUser user = SecurityUtils.getUser();
sysUserAddressService.updateForUser(user.getId(), dto);
return R.ok();
}
@SysLog("删除用户配送地址")
@DeleteMapping("/app/{id}")
@Operation(summary = "删除配送地址")
public R<Void> appRemove(@PathVariable Long id) {
PjcloudUser user = SecurityUtils.getUser();
sysUserAddressService.removeForUser(user.getId(), id);
return R.ok();
}
@PutMapping("/app/default/{id}")
@Operation(summary = "设为默认配送地址")
public R<Void> appSetDefault(@PathVariable Long id) {
PjcloudUser user = SecurityUtils.getUser();
sysUserAddressService.setDefault(user.getId(), id);
return R.ok();
}
/* ---------- 服务间(订餐等) ---------- */
@Inner
@GetMapping("/inner/list-by-user-id")
@Operation(summary = "按用户ID查询配送地址(内部)")
public R<List<SysUserAddressVo>> innerListByUserId(@RequestParam Long userId) {
return R.ok(sysUserAddressService.listVoByUserId(userId));
}
}
@@ -0,0 +1,9 @@
package com.bsd.pjcloud.admin.mapper.address;
import com.bsd.pjcloud.admin.api.entity.address.SysDeptBuildingEntity;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface SysDeptBuildingMapper extends PjcloudBaseMapper<SysDeptBuildingEntity> {
}
@@ -0,0 +1,9 @@
package com.bsd.pjcloud.admin.mapper.address;
import com.bsd.pjcloud.admin.api.entity.address.SysUserAddressEntity;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface SysUserAddressMapper extends PjcloudBaseMapper<SysUserAddressEntity> {
}
@@ -0,0 +1,21 @@
package com.bsd.pjcloud.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.admin.api.dto.address.SysDeptBuildingDto;
import com.bsd.pjcloud.admin.api.entity.address.SysDeptBuildingEntity;
import java.util.List;
public interface SysDeptBuildingService extends IService<SysDeptBuildingEntity> {
List<SysDeptBuildingEntity> listByDeptId(Long deptId);
Long create(SysDeptBuildingDto dto);
void edit(SysDeptBuildingDto dto);
/**
* 批量删除;若楼栋仍被用户地址引用则拒绝
*/
void removeBuildingsByIds(List<Long> ids);
}
@@ -0,0 +1,21 @@
package com.bsd.pjcloud.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.admin.api.dto.address.SysUserAddressDto;
import com.bsd.pjcloud.admin.api.entity.address.SysUserAddressEntity;
import com.bsd.pjcloud.admin.api.vo.address.SysUserAddressVo;
import java.util.List;
public interface SysUserAddressService extends IService<SysUserAddressEntity> {
List<SysUserAddressVo> listVoByUserId(Long userId);
Long saveForUser(Long userId, SysUserAddressDto dto);
void updateForUser(Long userId, SysUserAddressDto dto);
void removeForUser(Long userId, Long addressId);
void setDefault(Long userId, Long addressId);
}
@@ -0,0 +1,91 @@
package com.bsd.pjcloud.admin.service.impl.address;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.admin.api.dto.address.SysDeptBuildingDto;
import com.bsd.pjcloud.admin.api.entity.address.SysDeptBuildingEntity;
import com.bsd.pjcloud.admin.api.entity.address.SysUserAddressEntity;
import com.bsd.pjcloud.admin.mapper.address.SysDeptBuildingMapper;
import com.bsd.pjcloud.admin.mapper.address.SysUserAddressMapper;
import com.bsd.pjcloud.admin.service.SysDeptBuildingService;
import com.bsd.pjcloud.admin.service.SysDeptService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@RequiredArgsConstructor
public class SysDeptBuildingServiceImpl extends ServiceImpl<SysDeptBuildingMapper, SysDeptBuildingEntity>
implements SysDeptBuildingService {
private final SysDeptService sysDeptService;
private final SysUserAddressMapper sysUserAddressMapper;
@Override
public List<SysDeptBuildingEntity> listByDeptId(Long deptId) {
return list(Wrappers.<SysDeptBuildingEntity>lambdaQuery()
.eq(SysDeptBuildingEntity::getDeptId, deptId)
.orderByAsc(SysDeptBuildingEntity::getSortOrder)
.orderByAsc(SysDeptBuildingEntity::getId));
}
@Override
@Transactional(rollbackFor = Exception.class)
public Long create(SysDeptBuildingDto dto) {
if (sysDeptService.getById(dto.getDeptId()) == null) {
throw new IllegalArgumentException("单位不存在");
}
if (ObjectUtil.isEmpty(dto.getSortOrder())) {
dto.setSortOrder(0);
}
assertUniqueName(dto.getDeptId(), dto.getBuildingName(), null);
baseMapper.insert(dto);
return dto.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void edit(SysDeptBuildingDto dto) {
if (dto.getId() == null) {
throw new IllegalArgumentException("楼栋ID不能为空");
}
SysDeptBuildingEntity old = getById(dto.getId());
if (old == null) {
throw new IllegalArgumentException("楼栋不存在");
}
if (sysDeptService.getById(dto.getDeptId()) == null) {
throw new IllegalArgumentException("单位不存在");
}
assertUniqueName(dto.getDeptId(), dto.getBuildingName(), dto.getId());
baseMapper.updateById(dto);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void removeBuildingsByIds(List<Long> ids) {
if (ids == null || ids.isEmpty()) {
return;
}
for (Long buildingId : ids) {
Long cnt = sysUserAddressMapper.selectCount(Wrappers.<SysUserAddressEntity>lambdaQuery()
.eq(SysUserAddressEntity::getBuildingId, buildingId));
if (cnt != null && cnt > 0) {
throw new IllegalStateException("该楼栋已被用户配送地址引用,无法删除");
}
}
removeBatchByIds(ids);
}
private void assertUniqueName(Long deptId, String buildingName, Long excludeId) {
Long cnt = baseMapper.selectCount(Wrappers.<SysDeptBuildingEntity>lambdaQuery()
.eq(SysDeptBuildingEntity::getDeptId, deptId)
.eq(SysDeptBuildingEntity::getBuildingName, buildingName)
.ne(excludeId != null, SysDeptBuildingEntity::getId, excludeId));
if (cnt != null && cnt > 0) {
throw new IllegalArgumentException("同一单位下楼栋名称不能重复");
}
}
}
@@ -0,0 +1,168 @@
package com.bsd.pjcloud.admin.service.impl.address;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.admin.api.dto.address.SysUserAddressDto;
import com.bsd.pjcloud.admin.api.entity.SysDept;
import com.bsd.pjcloud.admin.api.entity.address.SysDeptBuildingEntity;
import com.bsd.pjcloud.admin.api.entity.address.SysUserAddressEntity;
import com.bsd.pjcloud.admin.api.vo.address.SysUserAddressVo;
import com.bsd.pjcloud.admin.mapper.address.SysUserAddressMapper;
import com.bsd.pjcloud.admin.service.SysDeptBuildingService;
import com.bsd.pjcloud.admin.service.SysDeptService;
import com.bsd.pjcloud.admin.service.SysUserAddressService;
import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class SysUserAddressServiceImpl extends ServiceImpl<SysUserAddressMapper, SysUserAddressEntity>
implements SysUserAddressService {
private final SysDeptService sysDeptService;
private final SysDeptBuildingService sysDeptBuildingService;
@Override
public List<SysUserAddressVo> listVoByUserId(Long userId) {
List<SysUserAddressEntity> list = list(Wrappers.<SysUserAddressEntity>lambdaQuery()
.eq(SysUserAddressEntity::getUserId, userId)
.orderByDesc(SysUserAddressEntity::getIsDefault)
.orderByDesc(SysUserAddressEntity::getUpdateTime));
if (list.isEmpty()) {
return List.of();
}
List<Long> deptIds = list.stream().map(SysUserAddressEntity::getDeptId).distinct().toList();
List<Long> buildingIds = list.stream().map(SysUserAddressEntity::getBuildingId).distinct().toList();
Map<Long, SysDept> deptMap = sysDeptService.listByIds(deptIds).stream()
.collect(Collectors.toMap(SysDept::getDeptId, d -> d, (a, b) -> a));
Map<Long, SysDeptBuildingEntity> buildingMap = sysDeptBuildingService.listByIds(buildingIds).stream()
.collect(Collectors.toMap(SysDeptBuildingEntity::getId, b -> b, (a, c) -> a));
List<SysUserAddressVo> vos = new ArrayList<>();
for (SysUserAddressEntity e : list) {
vos.add(toVo(e, deptMap.get(e.getDeptId()), buildingMap.get(e.getBuildingId())));
}
return vos;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Long saveForUser(Long userId, SysUserAddressDto dto) {
validateBinding(dto);
dto.setUserId(userId);
if (StrUtil.isBlank(dto.getIsDefault())) {
dto.setIsDefault(YesNoEnum.NO.getCode());
}
long existing = count(Wrappers.<SysUserAddressEntity>lambdaQuery().eq(SysUserAddressEntity::getUserId, userId));
if (existing == 0 || YesNoEnum.YES.getCode().equals(dto.getIsDefault())) {
clearDefault(userId);
dto.setIsDefault(YesNoEnum.YES.getCode());
}
baseMapper.insert(dto);
return dto.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateForUser(Long userId, SysUserAddressDto dto) {
if (dto.getId() == null) {
throw new IllegalArgumentException("地址ID不能为空");
}
SysUserAddressEntity old = getById(dto.getId());
if (old == null || !userId.equals(old.getUserId())) {
throw new IllegalArgumentException("地址不存在");
}
validateBinding(dto);
dto.setUserId(userId);
if (YesNoEnum.YES.getCode().equals(dto.getIsDefault())) {
clearDefault(userId);
dto.setIsDefault(YesNoEnum.YES.getCode());
} else if (StrUtil.isBlank(dto.getIsDefault())) {
dto.setIsDefault(old.getIsDefault());
}
baseMapper.updateById(dto);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void removeForUser(Long userId, Long addressId) {
SysUserAddressEntity old = getById(addressId);
if (old == null || !userId.equals(old.getUserId())) {
throw new IllegalArgumentException("地址不存在");
}
removeById(addressId);
if (YesNoEnum.YES.getCode().equals(old.getIsDefault())) {
List<SysUserAddressEntity> rest = list(Wrappers.<SysUserAddressEntity>lambdaQuery()
.eq(SysUserAddressEntity::getUserId, userId)
.orderByDesc(SysUserAddressEntity::getUpdateTime));
if (!rest.isEmpty()) {
SysUserAddressEntity first = rest.get(0);
first.setIsDefault(YesNoEnum.YES.getCode());
updateById(first);
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void setDefault(Long userId, Long addressId) {
SysUserAddressEntity entity = getById(addressId);
if (entity == null || !userId.equals(entity.getUserId())) {
throw new IllegalArgumentException("地址不存在");
}
clearDefault(userId);
entity.setIsDefault(YesNoEnum.YES.getCode());
updateById(entity);
}
private void clearDefault(Long userId) {
List<SysUserAddressEntity> defaults = list(Wrappers.<SysUserAddressEntity>lambdaQuery()
.eq(SysUserAddressEntity::getUserId, userId)
.eq(SysUserAddressEntity::getIsDefault, YesNoEnum.YES.getCode()));
for (SysUserAddressEntity d : defaults) {
d.setIsDefault(YesNoEnum.NO.getCode());
updateById(d);
}
}
private void validateBinding(SysUserAddressDto dto) {
if (dto.getDeptId() == null || dto.getBuildingId() == null) {
throw new IllegalArgumentException("单位与楼栋不能为空");
}
if (sysDeptService.getById(dto.getDeptId()) == null) {
throw new IllegalArgumentException("单位不存在");
}
SysDeptBuildingEntity building = sysDeptBuildingService.getById(dto.getBuildingId());
if (building == null) {
throw new IllegalArgumentException("楼栋不存在");
}
if (!building.getDeptId().equals(dto.getDeptId())) {
throw new IllegalArgumentException("所选楼栋不属于该单位");
}
}
private static SysUserAddressVo toVo(SysUserAddressEntity e, SysDept dept, SysDeptBuildingEntity building) {
SysUserAddressVo vo = new SysUserAddressVo();
vo.setId(e.getId());
vo.setUserId(e.getUserId());
vo.setDeptId(e.getDeptId());
vo.setDeptName(dept != null ? dept.getName() : null);
vo.setBuildingId(e.getBuildingId());
vo.setBuildingName(building != null ? building.getBuildingName() : null);
vo.setRoomNo(e.getRoomNo());
vo.setAddressLabel(e.getAddressLabel());
vo.setIsDefault(e.getIsDefault());
String unit = dept != null ? StrUtil.nullToEmpty(dept.getName()) : "";
String bname = building != null ? StrUtil.nullToEmpty(building.getBuildingName()) : "";
vo.setFullAddress(unit + bname + StrUtil.nullToEmpty(e.getRoomNo()));
return vo;
}
}