Преглед на файлове

Merge remote-tracking branch 'origin/dev' into dev

jinshihui преди 5 дни
родител
ревизия
bedf13c766
променени са 17 файла, в които са добавени 498 реда и са изтрити 14 реда
  1. 5 0
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/MaTechnicianController.java
  2. 38 0
      nightFragrance-common/src/main/java/com/ylx/common/utils/DistanceUtil.java
  3. 21 0
      nightFragrance-massage/src/main/java/com/ylx/fareSetting/controller/MaProjectFareSettingController.java
  4. 39 0
      nightFragrance-massage/src/main/java/com/ylx/fareSetting/domian/dto/FareCalculateDTO.java
  5. 29 0
      nightFragrance-massage/src/main/java/com/ylx/fareSetting/domian/vo/FareCalculateResultVO.java
  6. 3 0
      nightFragrance-massage/src/main/java/com/ylx/fareSetting/service/IMaProjectFareSettingService.java
  7. 129 0
      nightFragrance-massage/src/main/java/com/ylx/fareSetting/service/impl/MaProjectFareSettingServiceImpl.java
  8. 12 1
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/TAddress.java
  9. 20 0
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MerchantAuditFile.java
  10. 6 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/IMaTechnicianService.java
  11. 11 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/TAddressService.java
  12. 37 13
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/MaTechnicianServiceImpl.java
  13. 35 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TAddressServiceImpl.java
  14. 44 0
      nightFragrance-massage/src/main/java/com/ylx/useradress/domain/controller/UserAddressController.java
  15. 27 0
      nightFragrance-massage/src/main/java/com/ylx/useradress/domain/dto/UserAddressDto.java
  16. 40 0
      nightFragrance-massage/src/main/java/com/ylx/useradress/domain/vo/UserAddressVo.java
  17. 2 0
      nightFragrance-massage/src/main/resources/mapper/massage/TAddressMapper.xml

+ 5 - 0
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/MaTechnicianController.java

@@ -601,4 +601,9 @@ public class MaTechnicianController extends BaseController {
         return Result.ok(message);
     }
 
+    @GetMapping("/getTechnicianList")
+    public Result<?> getTechnicianList(@RequestParam(value = "userId") Long userId) {
+        return Result.ok(maTechnicianService.getTechnicianList(userId));
+    }
+
 }

+ 38 - 0
nightFragrance-common/src/main/java/com/ylx/common/utils/DistanceUtil.java

@@ -0,0 +1,38 @@
+package com.ylx.common.utils;
+
+import cn.hutool.core.util.ObjectUtil;
+
+/**
+ * 计算经纬度之间的直线距离
+ */
+public class DistanceUtil {
+
+    /**
+     * @param userLat 用户纬度
+     * @param userLon 用户经度
+     * @param shopLat 门店纬度
+     * @param shopLon 门店经度
+     * @return 返回距离单位为m
+     */
+    public static String formatDistance(Double userLat, Double userLon, Double shopLat, Double shopLon) {
+        // 任意坐标空/0 → 未知
+        if (ObjectUtil.hasNull(userLat, userLon, shopLat, shopLon)
+                || userLat == 0 || userLon == 0 || shopLat == 0 || shopLon == 0) {
+            return "未知";
+        }
+        double meter = getDistance(userLat, userLon, shopLat, shopLon);
+        return String.valueOf(Math.round(meter));
+    }
+
+    // 球面距离:lat1,lon1,lat2,lon2 → 米
+    private static double getDistance(double lat1, double lon1, double lat2, double lon2) {
+        double radLat1 = Math.toRadians(lat1);
+        double radLon1 = Math.toRadians(lon1);
+        double radLat2 = Math.toRadians(lat2);
+        double radLon2 = Math.toRadians(lon2);
+        double r = 6371;
+        double km = r * Math.acos(Math.cos(radLat1) * Math.cos(radLat2) * Math.cos(radLon2 - radLon1) + Math.sin(radLat1) * Math.sin(radLat2));
+        return km * 1000;
+    }
+
+}

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

@@ -1,13 +1,34 @@
 package com.ylx.fareSetting.controller;
 
+import com.ylx.common.core.domain.R;
+import com.ylx.fareSetting.domian.dto.FareCalculateDTO;
+import com.ylx.fareSetting.domian.vo.FareCalculateResultVO;
+import com.ylx.fareSetting.service.IMaProjectFareSettingService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+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 javax.annotation.Resource;
+
 @RestController
 @RequestMapping("/project/fare/setting")
 @Api(tags = {"项目车费标准设置"})
 @Slf4j
 public class MaProjectFareSettingController {
+
+    @Resource
+    private IMaProjectFareSettingService maProjectFareSettingService;
+
+
+    @PostMapping("/calculate")
+    @ApiOperation("下单前计算打车费")
+    public R<FareCalculateResultVO> calculate(@Validated @RequestBody FareCalculateDTO dto) {
+        FareCalculateResultVO result = maProjectFareSettingService.calculateFare(dto);
+        return R.ok(result);
+    }
 }

+ 39 - 0
nightFragrance-massage/src/main/java/com/ylx/fareSetting/domian/dto/FareCalculateDTO.java

@@ -0,0 +1,39 @@
+package com.ylx.fareSetting.domian.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel("车费计算请求DTO")
+public class FareCalculateDTO implements Serializable {
+    private static final long serialVersionUID = 1632111945634156891L;
+
+
+    @ApiModelProperty(value = "商户ID", required = true)
+    @NotNull(message = "商户ID不能为空")
+    private Long merchantId;
+
+    @ApiModelProperty(value = "项目/服务ID", required = true)
+    @NotNull(message = "项目ID不能为空")
+    private Long projectId;
+
+    @ApiModelProperty(value = "预约开始时间", required = true, example = "2024-01-07 15:30:00")
+    @NotNull(message = "预约时间不能为空")
+    private LocalDateTime appointmentStartTime;
+
+    @ApiModelProperty(value = "城市编码", required = true)
+    @NotNull(message = "城市编码")
+    private String cityCode;
+
+    @ApiModelProperty(value = "用户下单经度", required = true)
+    private Double longitude;
+
+    @ApiModelProperty(value = "用户下单纬度", required = true)
+    private Double latitude;
+
+}

+ 29 - 0
nightFragrance-massage/src/main/java/com/ylx/fareSetting/domian/vo/FareCalculateResultVO.java

@@ -0,0 +1,29 @@
+package com.ylx.fareSetting.domian.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.math.BigDecimal;
+
+@Data
+@ApiModel("车费计算结果")
+public class FareCalculateResultVO {
+
+    @ApiModelProperty("实际导航距离(公里)")
+    private BigDecimal actualDistanceKm;
+
+    @ApiModelProperty("免费里程额度(公里)")
+    private BigDecimal freeDistanceKm;
+
+    @ApiModelProperty("超出免费里程的距离(公里)")
+    private BigDecimal exceedDistanceKm;
+
+    @ApiModelProperty("预估打车费(元)")
+    private BigDecimal estimatedFare;
+
+    @ApiModelProperty("是否免车费")
+    private Boolean isFree;
+
+    @ApiModelProperty("提示信息,例如:在5公里范围内免车费")
+    private String message;
+}

+ 3 - 0
nightFragrance-massage/src/main/java/com/ylx/fareSetting/service/IMaProjectFareSettingService.java

@@ -2,6 +2,9 @@ package com.ylx.fareSetting.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.fareSetting.domian.MaProjectFareSetting;
+import com.ylx.fareSetting.domian.dto.FareCalculateDTO;
+import com.ylx.fareSetting.domian.vo.FareCalculateResultVO;
 
 public interface IMaProjectFareSettingService extends IService<MaProjectFareSetting> {
+    FareCalculateResultVO calculateFare(FareCalculateDTO dto);
 }

+ 129 - 0
nightFragrance-massage/src/main/java/com/ylx/fareSetting/service/impl/MaProjectFareSettingServiceImpl.java

@@ -1,11 +1,140 @@
 package com.ylx.fareSetting.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.CoordinateUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ylx.common.exception.ServiceException;
 import com.ylx.fareSetting.domian.MaProjectFareSetting;
+import com.ylx.fareSetting.domian.dto.FareCalculateDTO;
+import com.ylx.fareSetting.domian.vo.FareCalculateResultVO;
 import com.ylx.fareSetting.mapper.MaProjectFareSettingMapper;
 import com.ylx.fareSetting.service.IMaProjectFareSettingService;
+import com.ylx.massage.domain.TAddress;
+import com.ylx.massage.domain.vo.TFareSettingVo;
+import com.ylx.massage.service.TAddressService;
+import com.ylx.massage.service.TFareSettingService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalTime;
+import java.util.List;
+import java.util.Optional;
+
+
+@Slf4j
 @Service
 public class MaProjectFareSettingServiceImpl extends ServiceImpl<MaProjectFareSettingMapper, MaProjectFareSetting> implements IMaProjectFareSettingService {
+
+    @Resource
+    private TFareSettingService fareSettingService;
+    @Resource
+    private TAddressService addressService;
+
+    public FareCalculateResultVO calculateFare(FareCalculateDTO dto) {
+        FareCalculateResultVO result = new FareCalculateResultVO();
+
+        // 1.获取商户的默认地址
+        TAddress address = this.addressService.getOne(new LambdaQueryWrapper<TAddress>().eq(TAddress::getMerchantId, dto.getMerchantId()).eq(TAddress::getType, 1));
+        if (ObjectUtil.isNull(address)) {
+            throw new ServiceException("无法获取商户的默认地址");
+        }
+
+        // 1. 获取商户车费配置
+        LambdaQueryWrapper<MaProjectFareSetting> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(MaProjectFareSetting::getMerchantId, dto.getMerchantId())
+                .eq(MaProjectFareSetting::getIsDelete, 0);
+        List<MaProjectFareSetting> list = this.baseMapper.selectList(wrapper);
+
+        MaProjectFareSetting finalConfig = null;
+
+        if (CollUtil.isNotEmpty(list)) {
+            if (list.size() == 1 && ObjectUtil.equals(1, list.get(0).getIsUnified())) {
+                // 【情况A】集合数量为1 -> 是统一配置
+                // 直接取唯一的一条作为最终配置
+                log.info("商户[{}]仅有一条配置,判定为统一设置模式", dto.getMerchantId());
+                finalConfig = list.get(0);
+
+            } else {
+                // 【情况B】集合数量大于1 -> 不是统一配置(独立项目配置)
+                // 需要根据传入的 projectId 从列表中筛选出对应的项目配置
+                log.info("商户[{}]存在多条配置,根据projectId[{}]进行匹配", dto.getMerchantId(), dto.getProjectId());
+
+                // 使用 Stream API 过滤出当前项目对应的配置
+                Optional<MaProjectFareSetting> projectConfigOpt = list.stream()
+                        .filter(item -> item.getProjectId() != null && item.getProjectId().equals(dto.getProjectId()))
+                        .findFirst();
+
+                if (projectConfigOpt.isPresent()) {
+                    finalConfig = projectConfigOpt.get();
+                } else {
+                    // 可选:如果没找到对应项目的配置,是否回退到第一条?或者报错?
+                    // 这里假设必须精确匹配,否则抛异常或给默认值
+                    throw new ServiceException("未找到该项目[" + dto.getProjectId() + "]的专属车费配置");
+                }
+            }
+        } else {
+            // 【情况C】商户无配置 -> 获取后台城市车费设置
+            log.info("商户[{}]无配置,尝试获取城市[{}]的默认配置", dto.getMerchantId(), dto.getCityCode());
+            // TODO: 调用获取城市配置的 Service/Method
+            // finalConfig = cityFareService.getDefaultByCity(dto.getCityCode());
+            TFareSettingVo fareSetting = fareSettingService.getFareSetting("", dto.getCityCode());
+        }
+
+        // 此时 finalConfig 应该已经有值了,继续后续的距离计算逻辑...
+        if (ObjectUtil.isNull(finalConfig)) {
+            throw new ServiceException("无法获取有效的车费计算规则");
+        }
+
+        // 2. 判断时间段 (白天 vs 夜间)
+        // 假设白天是 7:30 - 19:30,其余为夜间 (具体逻辑根据你的业务定)
+        LocalTime time = dto.getAppointmentStartTime().toLocalTime();
+        boolean isDayTime = !time.isBefore(LocalTime.of(7, 30)) && time.isBefore(LocalTime.of(19, 30));
+
+        BigDecimal freeKm = isDayTime ? finalConfig.getDayFreeKm() : finalConfig.getNightFreeKm();
+        result.setFreeDistanceKm(freeKm);
+
+
+        // 3. 计算实际距离 (调用地图API)
+//
+//        // 参数顺序:纬度(lat), 经度(lon)
+//
+////        double distance = CoordinateUtil(37.870000, 112.550000, 37.880000, 112.560000);
+//
+//// 返回值单位是 米 (m),转换为公里
+//        double distanceKm = NumberUtil.div(distance, 1000, 2); // 保留2位小数
+//
+//        double distanceInMeters = this.baseMapper.calculateDistance(
+//                dto.getLatitude(), dto.getLongitude(),
+//                targetLat, targetLon
+//        );
+//
+//        BigDecimal actualKm = new BigDecimal(distanceInMeters).divide(new BigDecimal("1000"), 2, RoundingMode.HALF_UP);
+//        result.setActualDistanceKm(actualKm);
+//
+//        // 4. 计算费用
+//        BigDecimal freeKm = result.getFreeDistanceKm();
+//        BigDecimal exceedKm = actualKm.subtract(freeKm);
+//
+//        // 如果小于0,说明在免费范围内
+//        if (exceedKm.compareTo(BigDecimal.ZERO) <= 0) {
+//            result.setExceedDistanceKm(BigDecimal.ZERO);
+//            result.setEstimatedFare(BigDecimal.ZERO);
+//            result.setIsFree(true);
+//            result.setMessage(String.format("距离 %.2f km,在 %.2f km 免费范围内", actualKm, freeKm));
+//        } else {
+//            result.setExceedDistanceKm(exceedKm);
+//            // 费用 = 超出距离 * 单价
+//            BigDecimal fare = exceedKm.multiply(UNIT_PRICE).setScale(2, RoundingMode.HALF_UP);
+//            result.setEstimatedFare(fare);
+//            result.setIsFree(false);
+//            result.setMessage(String.format("超出免费里程 %.2f km,需支付车费", exceedKm));
+//        }
+
+        return result;
+    }
 }

+ 12 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TAddress.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ylx.common.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -31,12 +32,22 @@ public class TAddress extends Model<TAddress> {
      */
     @ApiModelProperty("商户id")
     private Long merchantId;
-
+    /**
+     * 性别(0女1男)
+     */
+    @TableField("sex")
+    private Integer sex;
     /**
      * 用户openId
      */
     @ApiModelProperty("用户openId")
     private String openid;
+
+    /**
+     * 城市编码
+     */
+    @ApiModelProperty("城市编码")
+    private String cityCode;
     //电话
     @ApiModelProperty("电话")
     private String phone;

+ 20 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MerchantAuditFile.java

@@ -0,0 +1,20 @@
+package com.ylx.massage.domain.vo;
+
+import com.ylx.massage.domain.MaTechnician;
+import com.ylx.massage.domain.MerchantApplyFile;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 商户审核文件信息
+ * @author ylx
+ * Created on 2022/3/23.
+ */
+@Data
+public class MerchantAuditFile {
+
+    private MaTechnician merchant;
+
+    private List<MerchantApplyFile> merchantAuditFile;
+}

+ 6 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/IMaTechnicianService.java

@@ -225,4 +225,10 @@ public interface IMaTechnicianService extends IService<MaTechnician> {
      * @return
      */
     int applyForService(MaProjectSaveDto dto);
+    /**
+     * 商户入住信息
+     * @param userId
+     * @return
+     */
+    MerchantAuditFile getTechnicianList(Long userId);
 }

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

@@ -2,6 +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.UserAddressDto;
+import com.ylx.useradress.domain.vo.UserAddressVo;
+
+import java.util.List;
 
 /**
  * 轮播图(TAddress)表服务接口
@@ -18,6 +22,13 @@ public interface TAddressService extends IService<TAddress> {
      */
     public TAddress getByOpenId(String openId);
 
+    /**
+     * 根据openId,userType查询地址列表
+     * @param dto
+     * @return
+     */
+    public List<UserAddressVo> getByOpenIdList(UserAddressDto dto);
+
     Boolean defaultAddress(TAddress tAddress);
 
     Object insertAddress(TAddress tAddress);

+ 37 - 13
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/MaTechnicianServiceImpl.java

@@ -128,12 +128,14 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
         maTechnicianMapper.insert(maTechnician);
 
     }
+
     /**
      * 商户入驻申请文件上传
+     *
      * @param req
      */
     @Override
-    public  void applyFile(MerchantApplyFileDto req){
+    public void applyFile(MerchantApplyFileDto req) {
         MerchantApplyFile maTechnician = new MerchantApplyFile();
         BeanUtils.copyProperties(req, maTechnician);
         maTechnician.setCreateBy(req.getMerchantId().toString());
@@ -396,6 +398,7 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
         }
         return uploadResult;
     }
+
     /**
      * 商户入驻审核。
      *
@@ -448,6 +451,7 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
         }
         return rows;
     }
+
     /**
      * 后台查询商户证照
      *
@@ -468,17 +472,17 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
         MaTechnicianCertificateVO certificate = new MaTechnicianCertificateVO();
         certificate.setMerchantId(merchantApplyFiles.get(0).getMerchantId());
         merchantApplyFiles.forEach(merchant -> {
-            certificate.setAvatar( typeFIleUrl(merchant,PORTRAIT.getCode()));
-            certificate.setLifePhotos( typeFIleUrl(merchant,LIFE_PHOTO.getCode()));
-            certificate.setIdCardFrout( typeFIleUrl(merchant,ID_CARD_FRONT.getCode()));
-            certificate.setIdCardBack( typeFIleUrl(merchant,ID_CARD_BACK.getCode()));
-            certificate.setIdCardHandheld( typeFIleUrl(merchant,ID_CARD_HANDHELD.getCode()));
-            certificate.setHealthCertificate( typeFIleUrl(merchant,HEALTH_CERT.getCode()));
-            certificate.setQualificationCertificate( typeFIleUrl(merchant,QUALIFICATION_CERT.getCode()));
-            certificate.setNoCrimeRecord( typeFIleUrl(merchant,NO_CRIME_RECORD.getCode()));
-            certificate.setCommitmentPdf( typeFIleUrl(merchant,COMMITMENT_LETTER.getCode()));
-            certificate.setCommitmentVideo( typeFIleUrl(merchant,COMMITMENT_VIDEO.getCode()));
-            certificate.setCommitmentAudio( typeFIleUrl(merchant,COMMITMENT_AUDIO.getCode()));
+            certificate.setAvatar(typeFIleUrl(merchant, PORTRAIT.getCode()));
+            certificate.setLifePhotos(typeFIleUrl(merchant, LIFE_PHOTO.getCode()));
+            certificate.setIdCardFrout(typeFIleUrl(merchant, ID_CARD_FRONT.getCode()));
+            certificate.setIdCardBack(typeFIleUrl(merchant, ID_CARD_BACK.getCode()));
+            certificate.setIdCardHandheld(typeFIleUrl(merchant, ID_CARD_HANDHELD.getCode()));
+            certificate.setHealthCertificate(typeFIleUrl(merchant, HEALTH_CERT.getCode()));
+            certificate.setQualificationCertificate(typeFIleUrl(merchant, QUALIFICATION_CERT.getCode()));
+            certificate.setNoCrimeRecord(typeFIleUrl(merchant, NO_CRIME_RECORD.getCode()));
+            certificate.setCommitmentPdf(typeFIleUrl(merchant, COMMITMENT_LETTER.getCode()));
+            certificate.setCommitmentVideo(typeFIleUrl(merchant, COMMITMENT_VIDEO.getCode()));
+            certificate.setCommitmentAudio(typeFIleUrl(merchant, COMMITMENT_AUDIO.getCode()));
 
         });
 
@@ -699,7 +703,7 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
         }
 
         Map<Integer, Project> projectMap = projects.stream()
-                                                .collect(Collectors.toMap(project -> project.getId(), Function.identity(), (left, right) -> left));
+                                                   .collect(Collectors.toMap(project -> project.getId(), Function.identity(), (left, right) -> left));
         Set<Integer> projectCategoryIds = new LinkedHashSet<>();
         for (Integer projectId : distinctProjectIds) {
             Project project = projectMap.get(projectId);
@@ -840,6 +844,26 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
         return 1;
     }
 
+    /**
+     * 商户入住信息
+     *
+     * @param userId
+     * @return
+     */
+    @Override
+    public MerchantAuditFile getTechnicianList(Long userId) {
+        LambdaQueryWrapper<MaTechnician> query = new LambdaQueryWrapper<>();
+        query.eq(MaTechnician::getId, userId);
+        MaTechnician merchant = maTechnicianMapper.selectOne(query);
+        LambdaQueryWrapper<MerchantApplyFile> query1 = new LambdaQueryWrapper<>();
+        query1.eq(MerchantApplyFile::getMerchantId, userId);
+        List<MerchantApplyFile> merchantApplyFile = merchantApplyFileMapper.selectList(query1);
+        MerchantAuditFile merchantAuditFile = new MerchantAuditFile();
+        merchantAuditFile.setMerchant(merchant);
+        merchantAuditFile.setMerchantAuditFile(merchantApplyFile);
+        return merchantAuditFile;
+    }
+
     private void extracted(MaProjectSaveDto dto) {
         LambdaQueryWrapper<Project> query = new LambdaQueryWrapper<>();
         query.in(Project::getId, dto.getProjectIdList());

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

@@ -1,15 +1,22 @@
 package com.ylx.massage.service.impl;
 
 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.UserAddressDto;
+import com.ylx.useradress.domain.vo.UserAddressVo;
 import com.ylx.massage.mapper.TAddressMapper;
 import com.ylx.massage.domain.TAddress;
 import com.ylx.massage.service.TAddressService;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Collections;
+import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 轮播图(TAddress)表服务实现类
@@ -27,6 +34,34 @@ public class TAddressServiceImpl extends ServiceImpl<TAddressMapper, TAddress> i
         return this.getOne(objectLambdaQueryWrapper);
     }
 
+
+    private List<TAddress> getAddressList(String openId, Integer userType,String cityCode) {
+        LambdaQueryWrapper<TAddress> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        objectLambdaQueryWrapper.eq(TAddress::getOpenid, openId)
+                .eq(TAddress::getUserType, userType)
+                .eq(TAddress::getCityCode,cityCode)
+                .eq(TAddress::getIsDelete,0)
+                .orderByDesc(TAddress::getCreateTime);
+        return this.list(objectLambdaQueryWrapper);
+    }
+    /**
+     *  根据openId和userType获取地址列表 用户类型(1:用户 2:商户)
+     * @param dto
+     * @return
+     */
+    @Override
+    public List<UserAddressVo> getByOpenIdList(UserAddressDto dto) {
+        List<TAddress> addressList = getAddressList(dto.getOpenId(), 1,dto.getCityCode());
+        if (CollectionUtils.isEmpty(addressList)) {
+            return Collections.emptyList();
+        }
+        return addressList.stream().map(this::convertToVo).collect(Collectors.toList());
+    }
+    private UserAddressVo convertToVo(TAddress address) {
+        UserAddressVo vo = new UserAddressVo();
+        BeanUtils.copyProperties(address, vo);
+        return vo;
+    }
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean defaultAddress(TAddress tAddress) {

+ 44 - 0
nightFragrance-massage/src/main/java/com/ylx/useradress/domain/controller/UserAddressController.java

@@ -0,0 +1,44 @@
+package com.ylx.useradress.domain.controller;
+
+import com.ylx.common.core.domain.R;
+import com.ylx.massage.service.TAddressService;
+import com.ylx.useradress.domain.dto.UserAddressDto;
+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.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 javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 类描述:
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/6/5 17:54
+ */
+@RestController
+@RequestMapping("/user/address")
+@Api(tags = {"项目车费标准设置"})
+@Slf4j
+public class UserAddressController {
+    @Resource
+    private TAddressService tAddressService;
+
+    /**
+     * 用户地址列表查询
+     *
+     * @return
+     */
+    @ApiOperation(value="用户地址列表查询", notes="用户地址列表查询")
+    @PostMapping(value = "/getUserAddress")
+    public R<List<UserAddressVo>> getUserAddress(@Validated @RequestBody UserAddressDto dto) {
+        return R.ok(tAddressService.getByOpenIdList(dto));
+    }
+}

+ 27 - 0
nightFragrance-massage/src/main/java/com/ylx/useradress/domain/dto/UserAddressDto.java

@@ -0,0 +1,27 @@
+package com.ylx.useradress.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+
+/**
+ * 类描述:C端用户地址列表dto
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/6/5 17:16
+ */
+@Data
+public class UserAddressDto {
+
+    @NotBlank(message = "微信openId不能为空")
+    @ApiModelProperty("微信openId")
+    private String openId;
+
+    @NotBlank(message = "城市编码不能为空")
+    @ApiModelProperty("城市编码")
+    private String cityCode;
+
+}

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

@@ -0,0 +1,40 @@
+package com.ylx.useradress.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+
+
+/**
+ * 类描述:C端用户地址列表vo
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/6/5 17:16
+ */
+public class UserAddressVo {
+
+    //电话
+    @ApiModelProperty("电话")
+    private String phone;
+
+    /**
+     * 姓名
+     */
+    @ApiModelProperty("姓名")
+    private String userName;
+    //地图展示地址
+    @ApiModelProperty("地图展示地址")
+    private String atlasAdd;
+    //经度
+    @ApiModelProperty("经度")
+    private Double longitude;
+    //纬度
+    @ApiModelProperty("纬度")
+    private Double latitude;
+    //详细地址
+    @ApiModelProperty("详细地址")
+    private String address;
+
+    @ApiModelProperty("地址name")
+    private String name;
+
+}

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

@@ -5,12 +5,14 @@
     <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="cityCode" column="city_code" jdbcType="VARCHAR"/>
         <result property="phone" column="phone" jdbcType="VARCHAR"/>
         <result property="userName" column="user_name" jdbcType="VARCHAR"/>
         <result property="atlasAdd" column="atlas_add" jdbcType="VARCHAR"/>
         <result property="longitude" column="longitude" jdbcType="NUMERIC"/>
         <result property="latitude" column="latitude" jdbcType="NUMERIC"/>
         <result property="type" column="type" jdbcType="INTEGER"/>
+        <result property="sex" column="sex" jdbcType="INTEGER"/>
         <result property="address" column="address" jdbcType="VARCHAR"/>
         <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
         <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>