Kaynağa Gözat

C端用户地址管理新增,编辑,删除以及获取验证码接口

郭子栋 4 gün önce
ebeveyn
işleme
bc0e604878

+ 2 - 1
nightFragrance-admin/src/main/resources/application-dev.yml

@@ -30,7 +30,8 @@ server:
       max: 800
       # Tomcat启动初始化的线程数,默认值10
       min-spare: 100
-
+# 本地环境登录验证码关闭,不做校验
+codeSwitch: false
 # 日志配置
 logging:
   level:

+ 2 - 1
nightFragrance-admin/src/main/resources/application-pro.yml

@@ -32,7 +32,8 @@ server:
       max: 800
       # Tomcat启动初始化的线程数,默认值10
       min-spare: 100
-
+# 本地环境登录验证码关闭,不做校验
+codeSwitch: false
 # 日志配置
 logging:
   level:

+ 2 - 1
nightFragrance-admin/src/main/resources/application-test.yml

@@ -33,7 +33,8 @@ server:
       max: 800
       # Tomcat启动初始化的线程数,默认值10
       min-spare: 100
-
+# 本地环境登录验证码关闭,不做校验
+codeSwitch: false
 # 日志配置
 logging:
   level:

+ 22 - 103
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TAddress.java

@@ -11,6 +11,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -26,7 +27,11 @@ public class TAddress extends Model<TAddress> {
     //主键
     @ApiModelProperty("主键")
     private String id;
-
+    /**
+     * TwxUser的主键用户id
+     */
+    @ApiModelProperty("TwxUser的主键用户id")
+    private String userId;
     /**
      * 商户id
      */
@@ -66,12 +71,17 @@ public class TAddress extends Model<TAddress> {
     //纬度
     @ApiModelProperty("纬度")
     private Double latitude;
-    //详细地址
-    @ApiModelProperty("详细地址")
+    //地址
+    @ApiModelProperty("地址")
     private String address;
 
-    @ApiModelProperty("地址name")
-    private String name;
+    //详细地址(地址+门牌号)
+    @ApiModelProperty("详细地址")
+    private String detailAddress;
+
+    //门牌号
+    @ApiModelProperty("门牌号")
+    private String roomNumber;
 
     /**
      * 用户类型 1:用户 2:技师
@@ -80,10 +90,15 @@ public class TAddress extends Model<TAddress> {
     private Integer userType;
 
     /**
-     * 地址类型 0:普通地址 1:默认地址 2:虚拟地址
+     * 地址类型 1:真实地址 2:虚拟地址
      */
-    @ApiModelProperty("地址类型 0:普通地址 1:默认地址 2:虚拟地址")
+    @ApiModelProperty("地址类型 1:真实地址 2:虚拟地址")
     private Integer type;
+    /**
+     * 地址是否默认 1:默认 0:非默认
+     */
+    @ApiModelProperty("地址是否默认 1:默认 0:非默认")
+    private Integer isDefault;
 
     /**
      * 创建时间
@@ -105,102 +120,6 @@ public class TAddress extends Model<TAddress> {
     private Integer isDelete;
 
 
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getOpenid() {
-        return openid;
-    }
-
-    public void setOpenid(String openid) {
-        this.openid = openid;
-    }
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    public String getAtlasAdd() {
-        return atlasAdd;
-    }
-
-    public void setAtlasAdd(String atlasAdd) {
-        this.atlasAdd = atlasAdd;
-    }
-
-    public Double getLongitude() {
-        return longitude;
-    }
-
-    public void setLongitude(Double longitude) {
-        this.longitude = longitude;
-    }
-
-    public Double getLatitude() {
-        return latitude;
-    }
-
-    public void setLatitude(Double latitude) {
-        this.latitude = latitude;
-    }
-
-    public Integer getType() {
-        return type;
-    }
-
-    public void setType(Integer type) {
-        this.type = type;
-    }
-
-    public String getAddress() {
-        return address;
-    }
-
-    public void setAddress(String address) {
-        this.address = address;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public Integer getIsDelete() {
-        return isDelete;
-    }
-
-    public void setIsDelete(Integer isDelete) {
-        this.isDelete = isDelete;
-    }
-
     /**
      * 获取主键值
      *

+ 13 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/TAddressService.java

@@ -2,7 +2,10 @@ package com.ylx.massage.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.massage.domain.TAddress;
+import com.ylx.useradress.domain.dto.UserAddressAddDto;
+import com.ylx.useradress.domain.dto.UserAddressDeleteDto;
 import com.ylx.useradress.domain.dto.UserAddressDto;
+import com.ylx.useradress.domain.dto.UserAddressUpdateDto;
 import com.ylx.useradress.domain.vo.UserAddressVo;
 
 import java.util.List;
@@ -41,5 +44,15 @@ public interface TAddressService extends IService<TAddress> {
     Object insertVirtualAddress(TAddress tAddress);
 
     Object updateAddress(TAddress tAddress);
+
+    /**
+     * 新增地址
+     * @param dto
+     */
+    void addUserAddress(UserAddressAddDto dto);
+
+    void updateUserAddress(UserAddressUpdateDto dto);
+
+    void deleteUserAddress(UserAddressDeleteDto dto);
 }
 

+ 144 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TAddressServiceImpl.java

@@ -1,10 +1,15 @@
 package com.ylx.massage.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.common.utils.StringUtils;
+import com.ylx.useradress.domain.dto.UserAddressAddDto;
+import com.ylx.useradress.domain.dto.UserAddressDeleteDto;
 import com.ylx.useradress.domain.dto.UserAddressDto;
+import com.ylx.useradress.domain.dto.UserAddressUpdateDto;
 import com.ylx.useradress.domain.vo.UserAddressVo;
 import com.ylx.massage.mapper.TAddressMapper;
 import com.ylx.massage.domain.TAddress;
@@ -27,6 +32,18 @@ import java.util.stream.Collectors;
 @Service("tAddressService")
 public class TAddressServiceImpl extends ServiceImpl<TAddressMapper, TAddress> implements TAddressService {
 
+    //0=未删除
+    private static final Integer NO_DELETE = 0;
+    //1=用户
+    private static final Integer USER_TYPE = 1;
+    //1=真实地址
+    private static final Integer TYPE = 1;
+    //1=默认地址
+    private static final Integer IS_DEFAULT = 1;
+    //0=不是默认地址
+    private static final Integer NO_DEFAULT = 0;
+
+
     @Override
     public TAddress getByOpenId(String openId) {
         LambdaQueryWrapper<TAddress> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -138,5 +155,132 @@ public class TAddressServiceImpl extends ServiceImpl<TAddressMapper, TAddress> i
         }
         return this.updateById(tAddress);
     }
+
+    /**
+     * 用户端新增地址
+     * @param dto
+     */
+    @Override
+    public void addUserAddress(UserAddressAddDto dto) {
+
+
+        // 1. DTO -> 实体 转换
+        TAddress address = new TAddress();
+        BeanUtil.copyProperties(dto, address);
+
+        // 2. 补充实体中缺失但需要入库的字段
+        address.setIsDelete(NO_DELETE);
+        address.setUserType(USER_TYPE);
+        address.setType(TYPE);
+        address.setDetailAddress(address.getAddress() + " " + address.getRoomNumber());
+
+
+        // 3. 处理默认地址逻辑
+        // 如果当前新增的地址是默认地址,需要先将该用户下的其他地址设为非默认
+        if (IS_DEFAULT.equals(dto.getIsDefault())) {
+            LambdaQueryWrapper<TAddress> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(TAddress::getUserId, dto.getUserId())
+                    .eq(TAddress::getIsDefault, IS_DEFAULT);
+            TAddress defaultExists = this.baseMapper.selectOne(wrapper);
+            if (defaultExists != null) {
+                defaultExists.setIsDefault(NO_DEFAULT);
+                this.updateById(defaultExists);
+            }
+        }
+
+        // 5. 执行入库
+        this.baseMapper.insert(address);
+    }
+
+    /**
+     * 用户端更新地址
+     * @param dto
+     */
+    @Override
+    public void updateUserAddress(UserAddressUpdateDto dto) {
+        // 1. 参数校验:地址ID不能为空
+        if (StrUtil.isBlank(dto.getId())) {
+            throw new RuntimeException("地址ID不能为空");
+        }
+
+        // 2. 查询原有地址记录
+        TAddress existingAddress = this.baseMapper.selectById(dto.getId());
+        if (existingAddress == null) {
+            throw new RuntimeException("地址不存在");
+        }
+
+        // 3. 权限校验:只能修改自己的地址
+        if (!existingAddress.getUserId().equals(dto.getUserId())) {
+            throw new RuntimeException("无权修改该地址");
+        }
+        // 4. 将DTO中非空字段拷贝到实体(忽略为null的字段)
+        BeanUtil.copyProperties(dto, existingAddress, "id", "userId", "openid", "merchantId",
+                "userType", "type", "createTime", "isDelete");
+
+        // 6. 拼接详细地址(address + 空格 + roomNumber)
+        String detailAddress = "";
+        if (StrUtil.isNotBlank(existingAddress.getAddress())
+                && StrUtil.isNotBlank(existingAddress.getRoomNumber())) {
+            detailAddress = existingAddress.getAddress() + " " + existingAddress.getRoomNumber();
+        } else if (StrUtil.isNotBlank(existingAddress.getAddress())) {
+            detailAddress = existingAddress.getAddress();
+        } else if (StrUtil.isNotBlank(existingAddress.getRoomNumber())) {
+            detailAddress = existingAddress.getRoomNumber();
+        }
+        existingAddress.setDetailAddress(detailAddress);
+
+        // 8. 执行更新(根据ID更新)
+        int rows = this.baseMapper.updateById(existingAddress);
+        if (rows != 1) {
+            throw new RuntimeException("更新地址失败");
+        }
+    }
+
+    /**
+     * 用户端删除地址
+     * @param dto
+     */
+    @Override
+    public void deleteUserAddress(UserAddressDeleteDto dto) {
+        String addressId = dto.getId();
+
+        // 1. 查询地址是否存在且未被删除
+        TAddress address = this.baseMapper.selectOne(
+                new LambdaQueryWrapper<TAddress>()
+                        .eq(TAddress::getId, addressId)
+                        .eq(TAddress::getIsDelete, 0)
+        );
+        if (address == null) {
+            throw new RuntimeException("地址不存在或已被删除");
+        }
+
+
+        // 2. 权限校验:只能删除自己的地址
+        if (!address.getUserId().equals(dto.getUserId())) {
+            throw new RuntimeException("无权删除该地址");
+        }
+
+        // 3. 执行逻辑删除(MyBatis-Plus 会自动将 isDelete 设为 1,并更新 updateTime)
+        int rows = this.baseMapper.deleteById(addressId);
+        if (rows != 1) {
+            throw new RuntimeException("删除地址失败");
+        }
+
+        // 4. 【可选】如果删除的是默认地址,将用户的其他最新地址设为默认
+        if (IS_DEFAULT.equals(address.getIsDefault())) {
+            // 查询该用户下未被删除的其他地址,按创建时间倒序取第一条
+            LambdaQueryWrapper<TAddress> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(TAddress::getUserId, dto.getUserId())
+                    .eq(TAddress::getIsDelete, 0)
+                    .orderByDesc(TAddress::getCreateTime)
+                    .last("limit 1");
+            TAddress newDefault = this.baseMapper.selectOne(wrapper);
+            if (newDefault != null) {
+                newDefault.setIsDefault(IS_DEFAULT);
+                this.baseMapper.updateById(newDefault);
+            }
+        }
+    }
+
 }
 

+ 113 - 5
nightFragrance-massage/src/main/java/com/ylx/useradress/domain/controller/UserAddressController.java

@@ -1,20 +1,32 @@
 package com.ylx.useradress.domain.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.ylx.common.core.domain.R;
+import com.ylx.common.core.domain.model.aliyun.SMSVerificationCode;
+import com.ylx.common.core.domain.model.aliyun.SendSmsComponents;
+import com.ylx.common.core.domain.model.aliyun.SendSmsEnum;
+import com.ylx.common.utils.StringUtils;
+import com.ylx.massage.domain.vo.Result;
 import com.ylx.massage.service.TAddressService;
+import com.ylx.useradress.domain.dto.UserAddressAddDto;
+import com.ylx.useradress.domain.dto.UserAddressDeleteDto;
 import com.ylx.useradress.domain.dto.UserAddressDto;
+import com.ylx.useradress.domain.dto.UserAddressUpdateDto;
 import com.ylx.useradress.domain.vo.UserAddressVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.util.List;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 类描述:
@@ -25,12 +37,19 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/user/address")
-@Api(tags = {"项目车费标准设置"})
+@Api(tags = {"用户端地址管理"})
 @Slf4j
 public class UserAddressController {
+    public static final String PHONE_USER_ADDRESS_CODE_KEY = "user:address:phon:";
+    @Value("${codeSwitch}")
+    private Boolean codeSwitch;
     @Resource
     private TAddressService tAddressService;
 
+    @Autowired
+    private StringRedisTemplate redisTemplate;
+    @Autowired
+    private SendSmsComponents sendSms;
     /**
      * 用户地址列表查询
      *
@@ -41,4 +60,93 @@ public class UserAddressController {
     public R<List<UserAddressVo>> getUserAddress(@Validated @RequestBody UserAddressDto dto) {
         return R.ok(tAddressService.getByOpenIdList(dto));
     }
+
+    /**
+     * 用户地址新增
+     *
+     * @return
+     */
+    @ApiOperation(value="新增用户地址", notes="新增用户地址")
+    @PostMapping(value = "/addUserAddress")
+    public R<?> addUserAddress(@Validated @RequestBody UserAddressAddDto dto) {
+        if (codeSwitch) {
+            // 短信验证
+            String msg = redisTemplate.opsForValue().get(PHONE_USER_ADDRESS_CODE_KEY + dto.getPhone());
+            if (StringUtils.isEmpty(msg)) {
+                return R.fail("验证码已失效");
+            }
+
+            if (!dto.getPhoneMsg().equals(msg)) {
+                return R.fail("短信验证码不正确");
+            }
+        }
+        tAddressService.addUserAddress(dto);
+        return R.ok();
+    }
+
+    /**
+     * 用户地址编辑
+     *
+     * @return
+     */
+    @ApiOperation(value="用户地址编辑", notes="用户地址编辑")
+    @PostMapping(value = "/updateUserAddress")
+    public R<?> updateUserAddress(@Validated @RequestBody UserAddressUpdateDto dto) {
+        if (codeSwitch) {
+            // 短信验证
+            String msg = redisTemplate.opsForValue().get(PHONE_USER_ADDRESS_CODE_KEY + dto.getPhone());
+            if (StringUtils.isEmpty(msg)) {
+                return R.fail("验证码已失效");
+            }
+
+            if (!dto.getPhoneMsg().equals(msg)) {
+                return R.fail("短信验证码不正确");
+            }
+        }
+        tAddressService.updateUserAddress(dto);
+        return R.ok();
+    }
+
+    /**
+     * 用户地址删除
+     *
+     * @return
+     */
+    @ApiOperation(value="用户地址删除", notes="用户地址删除")
+    @PostMapping(value = "/deleteUserAddress")
+    public R<?> deleteUserAddress(@Validated @RequestBody UserAddressDeleteDto dto) {
+        tAddressService.deleteUserAddress(dto);
+        return R.ok();
+    }
+
+    /**
+     * 用户地址新增或者编辑时获取验证码
+     * @param phone
+     * @param request
+     * @return
+     */
+    @GetMapping("/sendMsg")
+    @ApiOperation(value = "短信发送", notes = "短信发送")
+    public Result sendMsg(@RequestParam String phone, HttpServletRequest request) {
+        if (StringUtils.isEmpty(phone)) {
+            return Result.error("手机号不能为空");
+        }
+        Random rand = new Random();
+        // randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数
+        int randNumber = rand.nextInt(9999 - 1000 + 1) + 1000;
+        // 保存验证码到redis
+        redisTemplate.opsForValue()
+                .set(PHONE_USER_ADDRESS_CODE_KEY + phone, String.valueOf(randNumber), 5L
+                        , TimeUnit.MINUTES);
+        try {
+            SMSVerificationCode smsVerificationCode = new SMSVerificationCode(String.valueOf(randNumber));
+            String jsonString = JSON.toJSONString(smsVerificationCode);
+            sendSms.sendSms(phone, SendSmsEnum.SMS_220650024, jsonString);
+            return Result.ok("发送成功");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return Result.ok("发送失败");
+    }
+
 }

+ 86 - 0
nightFragrance-massage/src/main/java/com/ylx/useradress/domain/dto/UserAddressAddDto.java

@@ -0,0 +1,86 @@
+package com.ylx.useradress.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 类描述:用户地址管理新增dto
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/6/6 9:12
+ */
+@Data
+public class UserAddressAddDto {
+    /**
+     * TwxUser的主键用户id
+     */
+    @NotBlank(message = "用户id不能为空")
+    @ApiModelProperty("TwxUser的主键用户id")
+    private String userId;
+    /**
+     * 性别(0女1男)
+     */
+    @NotNull(message = "性别不能为空")
+    @TableField("sex")
+    private Integer sex;
+    /**
+     * 用户openId
+     */
+    @NotBlank(message = "用户openId不能为空")
+    @ApiModelProperty("用户openId")
+    private String openid;
+
+    /**
+     * 城市编码
+     */
+    @NotBlank(message = "城市编码不能为空")
+    @ApiModelProperty("城市编码")
+    private String cityCode;
+    //电话
+    @NotBlank(message = "电话不能为空")
+    @ApiModelProperty("电话")
+    private String phone;
+    /**
+     * 验证码
+     */
+    @NotBlank(message = "验证码不能为空")
+    @ApiModelProperty(value = "验证码")
+    private String phoneMsg;
+    /**
+     * 前端直接传入输入的姓氏
+     */
+    @NotBlank(message = "姓氏不能为空")
+    @ApiModelProperty("姓氏")
+    private String userName;
+
+    //经度
+    @NotNull(message = "经度不能为空")
+    @ApiModelProperty("经度")
+    private Double longitude;
+    //纬度
+    @NotNull(message = "纬度不能为空")
+    @ApiModelProperty("纬度")
+    private Double latitude;
+
+    //地址
+    @NotBlank(message = "地址不能为空")
+    @ApiModelProperty("地址")
+    private String address;
+
+    //门牌号
+    @NotBlank(message = "门牌号不能为空")
+    @ApiModelProperty("门牌号")
+    private String roomNumber;
+
+    /**
+     * 地址是否默认 1:默认 0:非默认
+     */
+    @NotNull(message = "地址是否默认不能为空")
+    @ApiModelProperty("地址是否默认 1:默认 0:非默认")
+    private Integer isDefault;
+}

+ 31 - 0
nightFragrance-massage/src/main/java/com/ylx/useradress/domain/dto/UserAddressDeleteDto.java

@@ -0,0 +1,31 @@
+package com.ylx.useradress.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 类描述:用户地址管理删除dto
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/6/6 9:12
+ */
+@Data
+public class UserAddressDeleteDto {
+    //地址id
+    @NotBlank(message = "地址id不能为空")
+    @ApiModelProperty("地址id")
+    private String id;
+    /**
+     * TwxUser的主键用户id
+     */
+    @NotBlank(message = "用户id不能为空")
+    @ApiModelProperty("TwxUser的主键用户id")
+    private String userId;
+
+
+}

+ 79 - 0
nightFragrance-massage/src/main/java/com/ylx/useradress/domain/dto/UserAddressUpdateDto.java

@@ -0,0 +1,79 @@
+package com.ylx.useradress.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 类描述:用户地址管理编辑dto
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/6/6 9:12
+ */
+@Data
+public class UserAddressUpdateDto {
+    //地址id
+    @NotBlank(message = "地址id不能为空")
+    @ApiModelProperty("地址id")
+    private String id;
+    /**
+     * TwxUser的主键用户id
+     */
+    @NotBlank(message = "用户id不能为空")
+    @ApiModelProperty("TwxUser的主键用户id")
+    private String userId;
+    /**
+     * 性别(0女1男)
+     */
+    @NotNull(message = "性别不能为空")
+    @TableField("sex")
+    private Integer sex;
+
+    /**
+     * 城市编码
+     */
+    @NotBlank(message = "城市编码不能为空")
+    @ApiModelProperty("城市编码")
+    private String cityCode;
+    //电话
+    @NotBlank(message = "电话不能为空")
+    @ApiModelProperty("电话")
+    private String phone;
+    /**
+     * 验证码
+     */
+    @NotBlank(message = "验证码不能为空")
+    @ApiModelProperty(value = "验证码")
+    private String phoneMsg;
+
+    /**
+     * 前端直接传入输入的姓氏
+     */
+    @NotBlank(message = "姓氏不能为空")
+    @ApiModelProperty("姓氏")
+    private String userName;
+
+    //经度
+    @NotNull(message = "经度不能为空")
+    @ApiModelProperty("经度")
+    private Double longitude;
+    //纬度
+    @NotNull(message = "纬度不能为空")
+    @ApiModelProperty("纬度")
+    private Double latitude;
+
+    //地址
+    @NotBlank(message = "地址不能为空")
+    @ApiModelProperty("地址")
+    private String address;
+
+    //门牌号
+    @NotBlank(message = "门牌号不能为空")
+    @ApiModelProperty("门牌号")
+    private String roomNumber;
+
+}

+ 25 - 0
nightFragrance-massage/src/main/java/com/ylx/useradress/domain/vo/UserAddressVo.java

@@ -1,6 +1,8 @@
 package com.ylx.useradress.domain.vo;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
 
 
 /**
@@ -10,12 +12,22 @@ import io.swagger.annotations.ApiModelProperty;
  * @version 1.0
  * @date 2026/6/5 17:16
  */
+@Data
 public class UserAddressVo {
 
+    //地址id
+    @ApiModelProperty("地址id")
+    private String id;
     //电话
     @ApiModelProperty("电话")
     private String phone;
 
+    /**
+     * TwxUser的主键用户id
+     */
+    @ApiModelProperty("TwxUser的主键用户id")
+    private String userId;
+
     /**
      * 姓名
      */
@@ -32,9 +44,22 @@ public class UserAddressVo {
     private Double latitude;
     //详细地址
     @ApiModelProperty("详细地址")
+    private String detailAddress;
+    //地址
+    @ApiModelProperty("地址")
     private String address;
 
+    //门牌号
+    @ApiModelProperty("门牌号")
+    private String roomNumber;
+
     @ApiModelProperty("地址name")
     private String name;
 
+    /**
+     * 地址是否默认 1:默认 0:非默认
+     */
+    @ApiModelProperty("地址是否默认 1:默认 0:非默认")
+    private Integer isDefault;
+
 }

+ 4 - 0
nightFragrance-massage/src/main/resources/mapper/massage/TAddressMapper.xml

@@ -5,6 +5,7 @@
     <resultMap type="com.ylx.massage.domain.TAddress" id="TAddressMap">
         <result property="id" column="id" jdbcType="VARCHAR"/>
         <result property="openid" column="openid" jdbcType="VARCHAR"/>
+        <result property="userId" column="user_id" jdbcType="VARCHAR"/>
         <result property="cityCode" column="city_code" jdbcType="VARCHAR"/>
         <result property="phone" column="phone" jdbcType="VARCHAR"/>
         <result property="userName" column="user_name" jdbcType="VARCHAR"/>
@@ -12,8 +13,11 @@
         <result property="longitude" column="longitude" jdbcType="NUMERIC"/>
         <result property="latitude" column="latitude" jdbcType="NUMERIC"/>
         <result property="type" column="type" jdbcType="INTEGER"/>
+        <result property="isDefault" column="type" jdbcType="INTEGER"/>
         <result property="sex" column="sex" jdbcType="INTEGER"/>
         <result property="address" column="address" jdbcType="VARCHAR"/>
+        <result property="detailAddress" column="detail_address" jdbcType="VARCHAR"/>
+        <result property="roomNumber" column="room_number" jdbcType="VARCHAR"/>
         <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
         <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
         <result property="isDelete" column="is_delete" jdbcType="INTEGER"/>