Quellcode durchsuchen

修改了查询草稿列表接口的问题

jinshihui vor 1 Woche
Ursprung
Commit
a4dc4ee8e6
15 geänderte Dateien mit 379 neuen und 31 gelöschten Zeilen
  1. 27 8
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TAddressController.java
  2. 2 0
      nightFragrance-massage/src/main/java/com/ylx/fareSetting/controller/MaProjectFareSettingController.java
  3. 2 0
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/TAddress.java
  4. 6 1
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MerchantAuditFile.java
  5. 51 0
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MerchantCurrentAddressVO.java
  6. 14 3
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MomentDetailVO.java
  7. 9 6
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MomentListVO.java
  8. 9 0
      nightFragrance-massage/src/main/java/com/ylx/massage/mapper/TAddressMapper.java
  9. 9 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/TAddressService.java
  10. 73 7
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TAddressServiceImpl.java
  11. 1 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TechnicianMomentServiceImpl.java
  12. 25 1
      nightFragrance-massage/src/main/resources/mapper/massage/TAddressMapper.xml
  13. 1 1
      nightFragrance-massage/src/main/resources/mapper/massage/TechnicianMomentMapper.xml
  14. 33 0
      nightFragrance-massage/src/test/java/com/ylx/massage/mapper/TAddressMapperXmlTest.java
  15. 117 4
      nightFragrance-massage/src/test/java/com/ylx/massage/service/impl/TAddressServiceImplTest.java

+ 27 - 8
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TAddressController.java

@@ -9,6 +9,7 @@ import com.ylx.common.core.controller.BaseController;
 import com.ylx.common.core.domain.R;
 import com.ylx.common.core.domain.R;
 import com.ylx.common.utils.StringUtils;
 import com.ylx.common.utils.StringUtils;
 import com.ylx.massage.domain.TAddress;
 import com.ylx.massage.domain.TAddress;
+import com.ylx.massage.domain.vo.MerchantCurrentAddressVO;
 import com.ylx.massage.domain.vo.UserAddressListVO;
 import com.ylx.massage.domain.vo.UserAddressListVO;
 import com.ylx.massage.service.TAddressService;
 import com.ylx.massage.service.TAddressService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
@@ -20,7 +21,7 @@ import javax.annotation.Resource;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * 轮播图(TAddress)表控制层
+ * 地址(TAddress)表控制层
  *
  *
  * @author makejava
  * @author makejava
  * @since 2024-04-11 17:18:52
  * @since 2024-04-11 17:18:52
@@ -84,7 +85,7 @@ public class TAddressController extends BaseController {
      * PC端根据openId查询用户地址
      * PC端根据openId查询用户地址
      *
      *
      * @param openId 用户openId
      * @param openId 用户openId
-     * @return R<List<UserAddressListVO>> 用户地址列表
+     * @return R<List < UserAddressListVO>> 用户地址列表
      */
      */
     @ApiOperation("PC端根据openId查询用户地址")
     @ApiOperation("PC端根据openId查询用户地址")
     @GetMapping("pc/getUserAddressList")
     @GetMapping("pc/getUserAddressList")
@@ -106,19 +107,36 @@ public class TAddressController extends BaseController {
         return R.ok(this.tAddressService.getById(id));
         return R.ok(this.tAddressService.getById(id));
     }
     }
 
 
+    /**
+     * 查询商户当前真实地址
+     *
+     * @param merchantId 商户ID
+     * @return R<MerchantCurrentAddressVO>
+     */
+    @ApiOperation("查询商户当前真实地址")
+    @GetMapping("merchant/currentAddress")
+    public R<MerchantCurrentAddressVO> getCurrentMerchantAddress(@RequestParam Integer merchantId) {
+        try {
+            return R.ok(this.tAddressService.getCurrentMerchantAddress(merchantId));
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+    }
+
 
 
     /**
     /**
      * 根据手机号码查询技师的虚拟地址(PC端)
      * 根据手机号码查询技师的虚拟地址(PC端)
      *
      *
      * @param phone
      * @param phone
-     * @return R<List<TAddress>>
+     * @return R<List < TAddress>>
      */
      */
     @ApiOperation("根据手机号码查询技师的虚拟地址")
     @ApiOperation("根据手机号码查询技师的虚拟地址")
     @GetMapping("getVirtualAddressByPhone")
     @GetMapping("getVirtualAddressByPhone")
     public R<List<TAddress>> getVirtualAddressByPhone(@RequestParam String phone) {
     public R<List<TAddress>> getVirtualAddressByPhone(@RequestParam String phone) {
         try {
         try {
             LambdaQueryWrapper<TAddress> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
             LambdaQueryWrapper<TAddress> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            objectLambdaQueryWrapper.eq(TAddress::getPhone, phone).eq(TAddress::getType, 2).eq(TAddress::getUserType,2);
+            objectLambdaQueryWrapper.eq(TAddress::getPhone, phone).eq(TAddress::getType, 2).eq(TAddress::getUserType, 2);
             return R.ok(this.tAddressService.list(objectLambdaQueryWrapper));
             return R.ok(this.tAddressService.list(objectLambdaQueryWrapper));
         } catch (Exception e) {
         } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
@@ -131,14 +149,14 @@ public class TAddressController extends BaseController {
      * 根据手机号码查询技师的虚拟地址(用户端)
      * 根据手机号码查询技师的虚拟地址(用户端)
      *
      *
      * @param phone
      * @param phone
-     * @return R<List<TAddress>>
+     * @return R<List < TAddress>>
      */
      */
     @ApiOperation("根据手机号码查询技师的虚拟地址")
     @ApiOperation("根据手机号码查询技师的虚拟地址")
     @GetMapping("/wx/getVirtualAddressByPhone")
     @GetMapping("/wx/getVirtualAddressByPhone")
     public R<List<TAddress>> getWXVirtualAddressByPhone(@RequestParam String phone) {
     public R<List<TAddress>> getWXVirtualAddressByPhone(@RequestParam String phone) {
         try {
         try {
             LambdaQueryWrapper<TAddress> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
             LambdaQueryWrapper<TAddress> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            objectLambdaQueryWrapper.eq(TAddress::getPhone, phone).eq(TAddress::getType, 2).eq(TAddress::getUserType,2);
+            objectLambdaQueryWrapper.eq(TAddress::getPhone, phone).eq(TAddress::getType, 2).eq(TAddress::getUserType, 2);
             return R.ok(this.tAddressService.list(objectLambdaQueryWrapper));
             return R.ok(this.tAddressService.list(objectLambdaQueryWrapper));
         } catch (Exception e) {
         } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
@@ -147,13 +165,13 @@ public class TAddressController extends BaseController {
     }
     }
 
 
     /**
     /**
-     * 新增地址(户端)
+     * 新增地址(户端)
      *
      *
      * @param tAddress 实体对象
      * @param tAddress 实体对象
      * @return R 新增结果
      * @return R 新增结果
      */
      */
     @PostMapping("save")
     @PostMapping("save")
-    @ApiOperation("新增地址")
+    @ApiOperation("新增商户地址")
     public R insert(@RequestBody TAddress tAddress) {
     public R insert(@RequestBody TAddress tAddress) {
         try {
         try {
             return R.ok(this.tAddressService.insertAddress(tAddress));
             return R.ok(this.tAddressService.insertAddress(tAddress));
@@ -226,6 +244,7 @@ public class TAddressController extends BaseController {
 
 
     /**
     /**
      * 设置默认地址
      * 设置默认地址
+     *
      * @param tAddress
      * @param tAddress
      * @return R
      * @return R
      */
      */

+ 2 - 0
nightFragrance-massage/src/main/java/com/ylx/fareSetting/controller/MaProjectFareSettingController.java

@@ -35,6 +35,8 @@ public class MaProjectFareSettingController {
         FareCalculateResultVO result = maProjectFareSettingService.calculateFare(dto);
         FareCalculateResultVO result = maProjectFareSettingService.calculateFare(dto);
         return R.ok(result);
         return R.ok(result);
     }
     }
+
+
     /**
     /**
      * 保存免车费设置
      * 保存免车费设置
      */
      */

+ 2 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TAddress.java

@@ -101,6 +101,7 @@ public class TAddress extends Model<TAddress> {
      */
      */
     @ApiModelProperty("地址类型 1:真实地址 2:虚拟地址")
     @ApiModelProperty("地址类型 1:真实地址 2:虚拟地址")
     private Integer type;
     private Integer type;
+
     /**
     /**
      * 地址是否默认 1:默认 0:非默认
      * 地址是否默认 1:默认 0:非默认
      */
      */
@@ -121,6 +122,7 @@ public class TAddress extends Model<TAddress> {
     @ApiModelProperty("修改时间")
     @ApiModelProperty("修改时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
     private Date updateTime;
+
     //是否删除0否1是
     //是否删除0否1是
     @ApiModelProperty("是否删除0否1是")
     @ApiModelProperty("是否删除0否1是")
     @TableLogic
     @TableLogic

+ 6 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MerchantAuditFile.java

@@ -13,8 +13,13 @@ import java.util.List;
  */
  */
 @Data
 @Data
 public class MerchantAuditFile {
 public class MerchantAuditFile {
-
+    /**
+     * 商户信息
+     */
     private MaTechnician merchant;
     private MaTechnician merchant;
 
 
+    /**
+     * 商户审核文件列表
+     */
     private List<MerchantApplyFile> merchantAuditFile;
     private List<MerchantApplyFile> merchantAuditFile;
 }
 }

+ 51 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MerchantCurrentAddressVO.java

@@ -0,0 +1,51 @@
+package com.ylx.massage.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 商户当前真实地址。
+ */
+@Data
+@ApiModel(value = "MerchantCurrentAddressVO", description = "商户当前真实地址")
+public class MerchantCurrentAddressVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("地址ID")
+    private String id;
+
+    @ApiModelProperty("商户ID")
+    private Integer merchantId;
+
+    @ApiModelProperty("页面展示地址")
+    private String address;
+
+    @ApiModelProperty("详细地址")
+    private String detailAddress;
+
+    @ApiModelProperty("门牌号")
+    private String roomNumber;
+
+    @ApiModelProperty("城市编码")
+    private String cityCode;
+
+    @ApiModelProperty("经度")
+    private BigDecimal longitude;
+
+    @ApiModelProperty("纬度")
+    private BigDecimal latitude;
+
+    @ApiModelProperty("联系人")
+    private String userName;
+
+    @ApiModelProperty("联系电话")
+    private String phone;
+
+    @ApiModelProperty("是否默认地址 1:默认 0:非默认")
+    private Integer isDefault;
+}

+ 14 - 3
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MomentDetailVO.java

@@ -68,11 +68,16 @@ public class MomentDetailVO {
     private BigDecimal latitude;
     private BigDecimal latitude;
 
 
     /**
     /**
-     * 发布地址
+     * 完整的详细地址信息
      */
      */
-    @ApiModelProperty("发布地址")
+    @ApiModelProperty("完整的详细地址信息")
     private String address;
     private String address;
 
 
+    /**
+     * 地址名称
+     */
+    @ApiModelProperty("地址名称")
+    private String location;
 
 
     /**
     /**
      * 商户ID
      * 商户ID
@@ -87,7 +92,7 @@ public class MomentDetailVO {
     private String technicianNickName;
     private String technicianNickName;
 
 
     /**
     /**
-     * 技师头像
+     * 商户头像
      */
      */
     @ApiModelProperty("技师头像")
     @ApiModelProperty("技师头像")
     private String technicianAvatar;
     private String technicianAvatar;
@@ -109,4 +114,10 @@ public class MomentDetailVO {
      */
      */
     @ApiModelProperty("距离(km)")
     @ApiModelProperty("距离(km)")
     private Double distance;
     private Double distance;
+
+    /**
+     * 审核状态(0-草稿 1-待审核 2-审核通过 3-审核拒绝)
+     */
+    @ApiModelProperty("审核状态(0-草稿 1-待审核 2-审核通过 3-审核拒绝)")
+    private Integer auditStatus;
 }
 }

+ 9 - 6
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MomentListVO.java

@@ -23,14 +23,12 @@ public class MomentListVO {
 
 
     /**
     /**
      * 动态ID
      * 动态ID
-     * 动态的主键标识
      */
      */
     @ApiModelProperty("动态ID")
     @ApiModelProperty("动态ID")
     private Long id;
     private Long id;
 
 
     /**
     /**
      * 动态标题
      * 动态标题
-     * 动态的标题文字,用于列表展示
      */
      */
     @ApiModelProperty("动态标题")
     @ApiModelProperty("动态标题")
     private String title;
     private String title;
@@ -40,6 +38,12 @@ public class MomentListVO {
      */
      */
     private String content;
     private String content;
 
 
+    /**
+     * 媒体类型:1-图片,2-视频
+     */
+    @ApiModelProperty("媒体类型:1-图片,2-视频")
+    private Integer mediaType;
+
     /**
     /**
      * 封面图URL
      * 封面图URL
      * 动态封面图片的访问地址,默认取第一张图片或视频封面图
      * 动态封面图片的访问地址,默认取第一张图片或视频封面图
@@ -49,14 +53,12 @@ public class MomentListVO {
 
 
     /**
     /**
      * 浏览量
      * 浏览量
-     * 动态被查看的总次数
      */
      */
     @ApiModelProperty("浏览量")
     @ApiModelProperty("浏览量")
     private Integer viewCount;
     private Integer viewCount;
 
 
     /**
     /**
      * 发布时间
      * 发布时间
-     * 动态发布的时间戳
      */
      */
     @ApiModelProperty("发布时间")
     @ApiModelProperty("发布时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" ,timezone = "GMT+8")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" ,timezone = "GMT+8")
@@ -64,10 +66,9 @@ public class MomentListVO {
 
 
     /**
     /**
      * 技师ID
      * 技师ID
-     * 发布该动态的技师主键标识
      */
      */
     @ApiModelProperty("技师ID")
     @ApiModelProperty("技师ID")
-    private String technicianId;
+    private Integer technicianId;
 
 
     /**
     /**
      * 技师昵称
      * 技师昵称
@@ -94,11 +95,13 @@ public class MomentListVO {
     /**
     /**
      * 审核状态:0-草稿,1-待审核,2-审核通过,3-审核拒绝
      * 审核状态:0-草稿,1-待审核,2-审核通过,3-审核拒绝
      */
      */
+    @ApiModelProperty("审核状态:0-草稿,1-待审核,2-审核通过,3-审核拒绝")
     private Integer auditStatus;
     private Integer auditStatus;
 
 
     /**
     /**
      * 拒绝原因
      * 拒绝原因
      */
      */
+    @ApiModelProperty("拒绝原因")
     private String rejectReason;
     private String rejectReason;
 
 
     /**
     /**

+ 9 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/mapper/TAddressMapper.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ylx.massage.domain.TAddress;
 import com.ylx.massage.domain.TAddress;
+import com.ylx.massage.domain.vo.MerchantCurrentAddressVO;
 import com.ylx.massage.domain.vo.UserAddressListVO;
 import com.ylx.massage.domain.vo.UserAddressListVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
@@ -40,5 +41,13 @@ public interface TAddressMapper extends BaseMapper<TAddress> {
      */
      */
     List<UserAddressListVO> selectPcUserAddressList(@Param("openId") String openId);
     List<UserAddressListVO> selectPcUserAddressList(@Param("openId") String openId);
 
 
+    /**
+     * 查询商户当前真实地址。
+     *
+     * @param merchantId 商户ID
+     * @return 商户当前真实地址
+     */
+    MerchantCurrentAddressVO selectCurrentMerchantRealAddress(@Param("merchantId") Integer merchantId);
+
 }
 }
 
 

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

@@ -2,6 +2,7 @@ package com.ylx.massage.service;
 
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.massage.domain.TAddress;
 import com.ylx.massage.domain.TAddress;
+import com.ylx.massage.domain.vo.MerchantCurrentAddressVO;
 import com.ylx.massage.domain.vo.UserAddressListVO;
 import com.ylx.massage.domain.vo.UserAddressListVO;
 import com.ylx.useradress.domain.dto.UserAddressAddDto;
 import com.ylx.useradress.domain.dto.UserAddressAddDto;
 import com.ylx.useradress.domain.dto.UserAddressDeleteDto;
 import com.ylx.useradress.domain.dto.UserAddressDeleteDto;
@@ -41,6 +42,14 @@ public interface TAddressService extends IService<TAddress> {
      */
      */
     List<UserAddressListVO> getPcUserAddressList(String openId);
     List<UserAddressListVO> getPcUserAddressList(String openId);
 
 
+    /**
+     * 查询商户当前真实地址。
+     *
+     * @param merchantId 商户ID
+     * @return 商户当前真实地址
+     */
+    MerchantCurrentAddressVO getCurrentMerchantAddress(Integer merchantId);
+
     Boolean defaultAddress(TAddress tAddress);
     Boolean defaultAddress(TAddress tAddress);
 
 
     Object insertAddress(TAddress tAddress);
     Object insertAddress(TAddress tAddress);

+ 73 - 7
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TAddressServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.common.utils.StringUtils;
 import com.ylx.common.utils.StringUtils;
 import com.ylx.massage.domain.dto.CoordinateDTO;
 import com.ylx.massage.domain.dto.CoordinateDTO;
 import com.ylx.massage.domain.vo.CityInfoVo;
 import com.ylx.massage.domain.vo.CityInfoVo;
+import com.ylx.massage.domain.vo.MerchantCurrentAddressVO;
 import com.ylx.massage.domain.vo.UserAddressListVO;
 import com.ylx.massage.domain.vo.UserAddressListVO;
 import com.ylx.massage.service.AreaService;
 import com.ylx.massage.service.AreaService;
 import com.ylx.useradress.domain.dto.UserAddressAddDto;
 import com.ylx.useradress.domain.dto.UserAddressAddDto;
@@ -44,6 +45,8 @@ public class TAddressServiceImpl extends ServiceImpl<TAddressMapper, TAddress> i
     private static final Integer NO_DELETE = 0;
     private static final Integer NO_DELETE = 0;
     //1=用户
     //1=用户
     private static final Integer USER_TYPE = 1;
     private static final Integer USER_TYPE = 1;
+    //2=商户
+    private static final Integer MERCHANT_USER_TYPE = 2;
     //1=真实地址
     //1=真实地址
     private static final Integer TYPE = 1;
     private static final Integer TYPE = 1;
     //1=默认地址
     //1=默认地址
@@ -90,6 +93,14 @@ public class TAddressServiceImpl extends ServiceImpl<TAddressMapper, TAddress> i
         return this.baseMapper.selectPcUserAddressList(openId);
         return this.baseMapper.selectPcUserAddressList(openId);
     }
     }
 
 
+    @Override
+    public MerchantCurrentAddressVO getCurrentMerchantAddress(Integer merchantId) {
+        if (Objects.isNull(merchantId)) {
+            throw new RuntimeException("商户id不能为空");
+        }
+        return this.baseMapper.selectCurrentMerchantRealAddress(merchantId);
+    }
+
     private UserAddressVo convertToVo(TAddress address) {
     private UserAddressVo convertToVo(TAddress address) {
         UserAddressVo vo = new UserAddressVo();
         UserAddressVo vo = new UserAddressVo();
         BeanUtils.copyProperties(address, vo);
         BeanUtils.copyProperties(address, vo);
@@ -112,19 +123,74 @@ public class TAddressServiceImpl extends ServiceImpl<TAddressMapper, TAddress> i
     }
     }
 
 
     @Override
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Object insertAddress(TAddress tAddress) {
     public Object insertAddress(TAddress tAddress) {
-        if (StringUtils.isBlank(tAddress.getOpenid())) {
-            throw new RuntimeException("openid不能为空");
+        if (Objects.isNull(tAddress)) {
+            throw new RuntimeException("地址信息不能为空");
         }
         }
-        //查询默认地址
-        TAddress oldAddress = this.getByOpenId(tAddress.getOpenid());
-        tAddress.setType(1);
-        if (oldAddress != null) {
-            tAddress.setType(0);
+        if (Objects.isNull(tAddress.getMerchantId())) {
+            throw new RuntimeException("商户id不能为空");
+        }
+        if (StringUtils.isBlank(tAddress.getAddress())) {
+            throw new RuntimeException("地址不能为空");
+        }
+        if (Objects.isNull(tAddress.getLongitude())) {
+            throw new RuntimeException("经度不能为空");
+        }
+        if (Objects.isNull(tAddress.getLatitude())) {
+            throw new RuntimeException("纬度不能为空");
+        }
+
+        TAddress oldDefaultAddress = this.getMerchantDefaultAddress(tAddress.getMerchantId());
+        boolean setAsDefault = oldDefaultAddress == null || IS_DEFAULT.equals(tAddress.getIsDefault());
+        fillMerchantAddressDefaults(tAddress, setAsDefault);
+
+        if (oldDefaultAddress != null && IS_DEFAULT.equals(tAddress.getIsDefault())) {
+            oldDefaultAddress.setIsDefault(NO_DEFAULT);
+            this.updateById(oldDefaultAddress);
         }
         }
         return this.save(tAddress);
         return this.save(tAddress);
     }
     }
 
 
+    /**
+     * 获取商户默认地址
+     *
+     * @param merchantId
+     * @return TAddress
+     */
+    private TAddress getMerchantDefaultAddress(Long merchantId) {
+        return this.getOne(new LambdaQueryWrapper<TAddress>()
+                .eq(TAddress::getMerchantId, merchantId)
+                .eq(TAddress::getUserType, MERCHANT_USER_TYPE)
+                .eq(TAddress::getType, TYPE)
+                .eq(TAddress::getIsDelete, NO_DELETE)
+                .eq(TAddress::getIsDefault, IS_DEFAULT)
+                .last("limit 1"));
+    }
+
+    private void fillMerchantAddressDefaults(TAddress tAddress, boolean setAsDefault) {
+        tAddress.setUserType(MERCHANT_USER_TYPE);
+        tAddress.setType(TYPE);
+        tAddress.setIsDelete(NO_DELETE);
+        tAddress.setIsDefault(setAsDefault ? IS_DEFAULT : NO_DEFAULT);
+        if (StringUtils.isBlank(tAddress.getDetailAddress())) {
+            String detailAddress = tAddress.getAddress();
+            if (StringUtils.isNotBlank(tAddress.getRoomNumber())) {
+                detailAddress = detailAddress + " " + tAddress.getRoomNumber();
+            }
+            tAddress.setDetailAddress(detailAddress);
+        }
+        if (StringUtils.isBlank(tAddress.getCityCode())) {
+            CoordinateDTO dto = new CoordinateDTO();
+            dto.setLongitude(tAddress.getLongitude());
+            dto.setLatitude(tAddress.getLatitude());
+            CityInfoVo cityInfoVo = areaService.getCityInfoByCoordinates(dto);
+            if (cityInfoVo != null && StringUtils.isNotBlank(cityInfoVo.getCityCode())) {
+                tAddress.setCityCode(cityInfoVo.getCityCode());
+            }
+        }
+    }
+
      @Override
      @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public Object insertVirtualAddress(TAddress tAddress) {
     public Object insertVirtualAddress(TAddress tAddress) {

+ 1 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TechnicianMomentServiceImpl.java

@@ -600,6 +600,7 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
         List<MomentListVO> collect = moments.stream().map(moment -> {
         List<MomentListVO> collect = moments.stream().map(moment -> {
             MomentListVO vo = new MomentListVO();
             MomentListVO vo = new MomentListVO();
             BeanUtils.copyProperties(moment, vo);
             BeanUtils.copyProperties(moment, vo);
+            vo.setTechnicianId(technician.getId());
             vo.setTechnicianNickName(technician.getTeNickName());
             vo.setTechnicianNickName(technician.getTeNickName());
             vo.setTechnicianAvatar(technician.getTeAvatar());
             vo.setTechnicianAvatar(technician.getTeAvatar());
             vo.setTechnicianStatus(getTechnicianStatus(technician));
             vo.setTechnicianStatus(getTechnicianStatus(technician));

+ 25 - 1
nightFragrance-massage/src/main/resources/mapper/massage/TAddressMapper.xml

@@ -6,14 +6,16 @@
         <result property="id" column="id" jdbcType="VARCHAR"/>
         <result property="id" column="id" jdbcType="VARCHAR"/>
         <result property="openid" column="openid" jdbcType="VARCHAR"/>
         <result property="openid" column="openid" jdbcType="VARCHAR"/>
         <result property="userId" column="user_id" jdbcType="VARCHAR"/>
         <result property="userId" column="user_id" jdbcType="VARCHAR"/>
+        <result property="merchantId" column="merchant_id" jdbcType="BIGINT"/>
         <result property="cityCode" column="city_code" jdbcType="VARCHAR"/>
         <result property="cityCode" column="city_code" jdbcType="VARCHAR"/>
         <result property="phone" column="phone" jdbcType="VARCHAR"/>
         <result property="phone" column="phone" jdbcType="VARCHAR"/>
         <result property="userName" column="user_name" jdbcType="VARCHAR"/>
         <result property="userName" column="user_name" jdbcType="VARCHAR"/>
         <result property="atlasAdd" column="atlas_add" jdbcType="VARCHAR"/>
         <result property="atlasAdd" column="atlas_add" jdbcType="VARCHAR"/>
         <result property="longitude" column="longitude" jdbcType="NUMERIC"/>
         <result property="longitude" column="longitude" jdbcType="NUMERIC"/>
         <result property="latitude" column="latitude" jdbcType="NUMERIC"/>
         <result property="latitude" column="latitude" jdbcType="NUMERIC"/>
+        <result property="userType" column="user_type" jdbcType="INTEGER"/>
         <result property="type" column="type" jdbcType="INTEGER"/>
         <result property="type" column="type" jdbcType="INTEGER"/>
-        <result property="isDefault" column="type" jdbcType="INTEGER"/>
+        <result property="isDefault" column="is_default" jdbcType="INTEGER"/>
         <result property="sex" column="sex" jdbcType="INTEGER"/>
         <result property="sex" column="sex" jdbcType="INTEGER"/>
         <result property="address" column="address" jdbcType="VARCHAR"/>
         <result property="address" column="address" jdbcType="VARCHAR"/>
         <result property="detailAddress" column="detail_address" jdbcType="VARCHAR"/>
         <result property="detailAddress" column="detail_address" jdbcType="VARCHAR"/>
@@ -59,5 +61,27 @@
         ORDER BY is_default DESC, create_time DESC
         ORDER BY is_default DESC, create_time DESC
     </select>
     </select>
 
 
+    <select id="selectCurrentMerchantRealAddress" resultType="com.ylx.massage.domain.vo.MerchantCurrentAddressVO">
+        SELECT
+            id,
+            merchant_id AS merchantId,
+            COALESCE(NULLIF(detail_address, ''), NULLIF(address, ''), atlas_add) AS address,
+            detail_address AS detailAddress,
+            room_number AS roomNumber,
+            city_code AS cityCode,
+            longitude,
+            latitude,
+            user_name AS userName,
+            phone,
+            is_default AS isDefault
+        FROM t_address
+        WHERE merchant_id = #{merchantId}
+          AND user_type = 2
+          AND type = 1
+          AND is_delete = 0
+        ORDER BY is_default DESC, create_time DESC
+        LIMIT 1
+    </select>
+
 </mapper>
 </mapper>
 
 

+ 1 - 1
nightFragrance-massage/src/main/resources/mapper/massage/TechnicianMomentMapper.xml

@@ -90,7 +90,7 @@
         SET
         SET
             view_count = view_count + 1
             view_count = view_count + 1
         WHERE
         WHERE
-            id = #{momentId} and status = 1 and audit_status = 2
+            id = #{momentId} and is_delete = 0 and audit_status = 2
     </update>
     </update>
 
 
     <!-- 更新动态推荐状态 -->
     <!-- 更新动态推荐状态 -->

+ 33 - 0
nightFragrance-massage/src/test/java/com/ylx/massage/mapper/TAddressMapperXmlTest.java

@@ -25,6 +25,30 @@ public class TAddressMapperXmlTest {
         assertFalse(xml.contains("user_id = #{userId}"));
         assertFalse(xml.contains("user_id = #{userId}"));
     }
     }
 
 
+    @Test
+    public void addressResultMapUsesMerchantAddressColumns() throws Exception {
+        String xml = readMapperXml();
+
+        assertTrue(xml.contains("property=\"merchantId\" column=\"merchant_id\""));
+        assertTrue(xml.contains("property=\"userType\" column=\"user_type\""));
+        assertTrue(xml.contains("property=\"isDefault\" column=\"is_default\""));
+        assertFalse(xml.contains("property=\"isDefault\" column=\"type\""));
+    }
+
+    @Test
+    public void currentMerchantAddressOnlyQueriesRealMerchantAddress() throws Exception {
+        String xml = readMapperXml();
+        String selectSql = extractSelect(xml, "selectCurrentMerchantRealAddress");
+
+        assertTrue(selectSql.contains("merchant_id = #{merchantId}"));
+        assertTrue(selectSql.contains("user_type = 2"));
+        assertTrue(selectSql.contains("type = 1"));
+        assertTrue(selectSql.contains("is_delete = 0"));
+        assertTrue(selectSql.contains("ORDER BY is_default DESC, create_time DESC"));
+        assertTrue(selectSql.contains("LIMIT 1"));
+        assertFalse(selectSql.contains("AND type = 2"));
+    }
+
     private String readMapperXml() throws Exception {
     private String readMapperXml() throws Exception {
         try (InputStream inputStream = getClass().getClassLoader()
         try (InputStream inputStream = getClass().getClassLoader()
                 .getResourceAsStream("mapper/massage/TAddressMapper.xml")) {
                 .getResourceAsStream("mapper/massage/TAddressMapper.xml")) {
@@ -34,4 +58,13 @@ public class TAddressMapperXmlTest {
             return new String(bytes, StandardCharsets.UTF_8);
             return new String(bytes, StandardCharsets.UTF_8);
         }
         }
     }
     }
+
+    private String extractSelect(String xml, String selectId) {
+        String startTag = "<select id=\"" + selectId + "\"";
+        int start = xml.indexOf(startTag);
+        assertTrue(start >= 0, selectId + " should exist");
+        int end = xml.indexOf("</select>", start);
+        assertTrue(end > start, selectId + " should have closing select tag");
+        return xml.substring(start, end);
+    }
 }
 }

+ 117 - 4
nightFragrance-massage/src/test/java/com/ylx/massage/service/impl/TAddressServiceImplTest.java

@@ -1,19 +1,132 @@
 package com.ylx.massage.service.impl;
 package com.ylx.massage.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import com.ylx.massage.domain.TAddress;
+import com.ylx.massage.domain.vo.MerchantCurrentAddressVO;
+import com.ylx.massage.mapper.TAddressMapper;
+import org.apache.ibatis.builder.MapperBuilderAssistant;
+import org.apache.ibatis.session.Configuration;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import java.math.BigDecimal;
 
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertSame;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 
 public class TAddressServiceImplTest {
 public class TAddressServiceImplTest {
 
 
     @Test
     @Test
-    public void pcUserAddressListRejectsBlankOpenId() {
+    public void getCurrentMerchantAddressRejectsBlankMerchantId() {
+        TAddressServiceImpl service = new TAddressServiceImpl();
+
+        RuntimeException exception = assertThrows(RuntimeException.class,
+                () -> service.getCurrentMerchantAddress(null));
+
+        assertEquals("商户id不能为空", exception.getMessage());
+    }
+
+    @Test
+    public void getCurrentMerchantAddressDelegatesToMapper() {
+        TAddressMapper mapper = mock(TAddressMapper.class);
+        MerchantCurrentAddressVO address = new MerchantCurrentAddressVO();
+        when(mapper.selectCurrentMerchantRealAddress(11)).thenReturn(address);
         TAddressServiceImpl service = new TAddressServiceImpl();
         TAddressServiceImpl service = new TAddressServiceImpl();
+        ReflectionTestUtils.setField(service, "baseMapper", mapper);
+
+        MerchantCurrentAddressVO result = service.getCurrentMerchantAddress(11);
 
 
-        IllegalArgumentException exception = assertThrows(IllegalArgumentException.class,
-                () -> service.getPcUserAddressList(" "));
+        assertSame(address, result);
+        verify(mapper).selectCurrentMerchantRealAddress(11);
+    }
+
+    @Test
+    public void insertAddressRejectsBlankMerchantId() {
+        TAddressServiceImpl service = new TAddressServiceImpl();
+        TAddress address = new TAddress();
+
+        RuntimeException exception = assertThrows(RuntimeException.class,
+                () -> service.insertAddress(address));
+
+        assertEquals("商户id不能为空", exception.getMessage());
+    }
+
+    @Test
+    public void insertAddressSavesMerchantRealAddressWithDefaults() {
+        initTableInfo();
+        TAddressMapper mapper = mock(TAddressMapper.class);
+        when(mapper.selectOne(any(Wrapper.class))).thenReturn(null);
+        when(mapper.insert(any(TAddress.class))).thenReturn(1);
+        TAddressServiceImpl service = new TAddressServiceImpl();
+        ReflectionTestUtils.setField(service, "baseMapper", mapper);
+        TAddress address = buildMerchantAddress();
+        address.setType(2);
+        address.setUserType(1);
+        address.setIsDelete(1);
+
+        service.insertAddress(address);
+
+        ArgumentCaptor<TAddress> captor = ArgumentCaptor.forClass(TAddress.class);
+        verify(mapper).insert(captor.capture());
+        TAddress saved = captor.getValue();
+        assertEquals(2, saved.getUserType());
+        assertEquals(1, saved.getType());
+        assertEquals(0, saved.getIsDelete());
+        assertEquals(1, saved.getIsDefault());
+        assertEquals("上海市浦东新区 8号楼", saved.getDetailAddress());
+    }
+
+    @Test
+    public void insertAddressClearsOldDefaultWhenNewAddressIsDefault() {
+        initTableInfo();
+        TAddressMapper mapper = mock(TAddressMapper.class);
+        TAddress oldDefault = new TAddress();
+        oldDefault.setId("old-address");
+        oldDefault.setIsDefault(1);
+        when(mapper.selectOne(any(Wrapper.class))).thenReturn(oldDefault);
+        when(mapper.updateById(any(TAddress.class))).thenReturn(1);
+        when(mapper.insert(any(TAddress.class))).thenReturn(1);
+        TAddressServiceImpl service = new TAddressServiceImpl();
+        ReflectionTestUtils.setField(service, "baseMapper", mapper);
+        TAddress address = buildMerchantAddress();
+        address.setIsDefault(1);
+
+        service.insertAddress(address);
+
+        ArgumentCaptor<TAddress> updateCaptor = ArgumentCaptor.forClass(TAddress.class);
+        ArgumentCaptor<TAddress> insertCaptor = ArgumentCaptor.forClass(TAddress.class);
+        verify(mapper).updateById(updateCaptor.capture());
+        verify(mapper).insert(insertCaptor.capture());
+        assertEquals("old-address", updateCaptor.getValue().getId());
+        assertEquals(0, updateCaptor.getValue().getIsDefault());
+        assertEquals(1, insertCaptor.getValue().getIsDefault());
+    }
+
+    private TAddress buildMerchantAddress() {
+        TAddress address = new TAddress();
+        address.setMerchantId(11L);
+        address.setOpenid("merchant-openid");
+        address.setPhone("13800000000");
+        address.setUserName("商户");
+        address.setCityCode("310000");
+        address.setLongitude(new BigDecimal("121.500000"));
+        address.setLatitude(new BigDecimal("31.200000"));
+        address.setAddress("上海市浦东新区");
+        address.setRoomNumber("8号楼");
+        return address;
+    }
 
 
-        assertEquals("openId不能为空", exception.getMessage());
+    private void initTableInfo() {
+        if (TableInfoHelper.getTableInfo(TAddress.class) == null) {
+            MapperBuilderAssistant assistant = new MapperBuilderAssistant(new Configuration(), "");
+            TableInfoHelper.initTableInfo(assistant, TAddress.class);
+        }
     }
     }
 }
 }