wangzhijun пре 2 дана
родитељ
комит
068424e124

+ 4 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/mapper/MaTechnicianMapper.java

@@ -16,7 +16,9 @@ import com.ylx.massage.domain.vo.MaTechnicianMerchantListVO;
 import com.ylx.massage.domain.vo.MassageProjectRecommendVo;
 import com.ylx.massage.domain.vo.MerchantVo;
 import com.ylx.merchant.domain.dto.MerchantListDTO;
+import com.ylx.merchant.domain.dto.MerchantProjectDTO;
 import com.ylx.merchant.domain.vo.MerchantListVO;
+import com.ylx.project.domain.bookMerchant.vo.ProjectInfoVO;
 import org.apache.ibatis.annotations.Param;
 import org.mapstruct.Mapper;
 import org.apache.ibatis.annotations.Select;
@@ -206,5 +208,7 @@ public interface MaTechnicianMapper extends BaseMapper<MaTechnician>
     List<HotCompanionMerchantVO> getHotCompanionMerchantList(@Param("dto") CompanionRecommendDTO dto);
 
     Page<MerchantListVO> getMerchantPage(Page<MerchantListVO> page, @Param("dto") MerchantListDTO dto);
+
+    Page<ProjectInfoVO> getByMerchantProject(Page<ProjectInfoVO> page, @Param("dto") MerchantProjectDTO dto);
 }
 

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

@@ -26,8 +26,10 @@ import com.ylx.massage.domain.vo.MaTechnicianMerchantDetailVO;
 import com.ylx.massage.domain.vo.MaTechnicianMerchantListVO;
 import com.ylx.massage.domain.vo.MerchantVo;
 import com.ylx.merchant.domain.dto.MerchantListDTO;
+import com.ylx.merchant.domain.dto.MerchantProjectDTO;
 import com.ylx.merchant.domain.vo.MerchantListVO;
 import com.ylx.project.domain.Project;
+import com.ylx.project.domain.bookMerchant.vo.ProjectInfoVO;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -282,4 +284,6 @@ public interface IMaTechnicianService extends IService<MaTechnician> {
     List<ContractRecord> getContractRecords(Long userId);
 
     Page<MerchantListVO> getMerchantPage(MerchantListDTO dto);
+
+    Page<ProjectInfoVO> getByMerchantProject(MerchantProjectDTO dto);
 }

+ 9 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/MaTechnicianServiceImpl.java

@@ -51,10 +51,12 @@ import com.ylx.massage.mapper.MaProjectMapper;
 import com.ylx.massage.mapper.MaTeProjectMapper;
 import com.ylx.massage.service.TbFileService;
 import com.ylx.merchant.domain.dto.MerchantListDTO;
+import com.ylx.merchant.domain.dto.MerchantProjectDTO;
 import com.ylx.merchant.domain.vo.MerchantListVO;
 import com.ylx.order.domain.TOrder;
 import com.ylx.order.mapper.TOrderMapper;
 import com.ylx.project.domain.Project;
+import com.ylx.project.domain.bookMerchant.vo.ProjectInfoVO;
 import com.ylx.project.mapper.ProjectMapper;
 import lombok.Data;
 import org.springframework.beans.BeanUtils;
@@ -985,7 +987,7 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
                 double currentDistance = vo.getDistance(); // 数据库算出的距离(km)
 
                 // 获取该商户的有效免费里程
-                BigDecimal freeKm = this.maProjectFareSettingService.getMerchantFreeKm(vo.getId(), dto.getProjectId(),isDay);
+                BigDecimal freeKm = this.maProjectFareSettingService.getMerchantFreeKm(Long.parseLong(vo.getId()), vo.getProjectId(), isDay);
 
                 // 核心判断:如果没配置(为0) 或者 距离超过了免费里程,则剔除
                 if (freeKm == null || freeKm.doubleValue() <= 0 || currentDistance > freeKm.doubleValue()) {
@@ -997,6 +999,12 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
         return page;
     }
 
+    @Override
+    public Page<ProjectInfoVO> getByMerchantProject(MerchantProjectDTO dto) {
+        Page<ProjectInfoVO> page = new Page<>(dto.getCurrent(), dto.getSize());
+        return this.baseMapper.getByMerchantProject(page, dto);
+    }
+
 
     private void extracted(MaProjectSaveDto dto) {
         LambdaQueryWrapper<Project> query = new LambdaQueryWrapper<>();

+ 13 - 5
nightFragrance-massage/src/main/java/com/ylx/merchant/controller/ClientMerchantController.java

@@ -4,15 +4,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.common.core.domain.R;
 import com.ylx.massage.service.IMaTechnicianService;
 import com.ylx.merchant.domain.dto.MerchantListDTO;
+import com.ylx.merchant.domain.dto.MerchantProjectDTO;
 import com.ylx.merchant.domain.vo.MerchantListVO;
+import com.ylx.project.domain.bookMerchant.vo.ProjectInfoVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.access.prepost.PreAuthorize;
 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;
 
@@ -20,6 +20,7 @@ import javax.annotation.Resource;
 @RequestMapping("/client/merchant")
 @Api(tags = {"用户端商户"})
 @Slf4j
+@PreAuthorize("@customerAuth.isCustomer()")
 public class ClientMerchantController {
 
     @Resource
@@ -28,7 +29,14 @@ public class ClientMerchantController {
     @PostMapping("/page")
     @ApiOperation("同城搭子分页查询接口")
     public R<Page<MerchantListVO>> getMerchantPage(@Validated @RequestBody MerchantListDTO dto) {
-        Page<MerchantListVO> pageData = maTechnicianService.getMerchantPage(dto);
+        Page<MerchantListVO> pageData = this.maTechnicianService.getMerchantPage(dto);
+        return R.ok(pageData);
+    }
+
+    @PostMapping("/project/page")
+    @ApiOperation("同城搭子商户技能分页查询接口")
+    public R<Page<ProjectInfoVO>> getByMerchantProject(@Validated @RequestBody MerchantProjectDTO dto) {
+        Page<ProjectInfoVO> pageData = this.maTechnicianService.getByMerchantProject(dto);
         return R.ok(pageData);
     }
 

+ 3 - 2
nightFragrance-massage/src/main/java/com/ylx/merchant/domain/dto/MerchantListDTO.java

@@ -15,8 +15,9 @@ import java.math.BigDecimal;
 public class MerchantListDTO extends Page<MaTechnician> implements Serializable {
     private static final long serialVersionUID = -7015224259717934375L;
 
-    @ApiModelProperty("项目ID")
-    private Long projectId;
+    @NotNull(message = "项目类目ID不能为空")
+    @ApiModelProperty("项目类目ID")
+    private Long categoryId;
 
     @ApiModelProperty("城市编码")
     private String cityCode;

+ 25 - 0
nightFragrance-massage/src/main/java/com/ylx/merchant/domain/dto/MerchantProjectDTO.java

@@ -0,0 +1,25 @@
+package com.ylx.merchant.domain.dto;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ylx.project.domain.bookMerchant.vo.ProjectInfoVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+@ApiModel("同城搭子商户技能分页查询DTO")
+public class MerchantProjectDTO extends Page<ProjectInfoVO> implements Serializable {
+    private static final long serialVersionUID = -7015224259717934375L;
+
+    @NotNull(message = "商户ID不能为空")
+    @ApiModelProperty("商户ID")
+    private Long id;
+
+    @NotNull(message = "服务类目ID不能为空")
+    @ApiModelProperty("服务类目ID")
+    private Long categoryId;
+
+}

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

@@ -1,5 +1,6 @@
 package com.ylx.merchant.domain.vo;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -13,7 +14,7 @@ public class MerchantListVO implements Serializable {
     private static final long serialVersionUID = 6026187868884160213L;
 
     @ApiModelProperty("id")
-    private Long id;
+    private String id;
 
     @ApiModelProperty("商户名称")
     private String name;
@@ -21,6 +22,10 @@ public class MerchantListVO implements Serializable {
     @ApiModelProperty("头像")
     private String avatar;
 
+    @JsonIgnore
+    @ApiModelProperty("项目ID")
+    private Long projectId;
+
     @ApiModelProperty("价格")
     private BigDecimal price;
 

+ 0 - 1
nightFragrance-massage/src/main/java/com/ylx/project/domain/bookMerchant/vo/ProjectInfoVO.java

@@ -31,7 +31,6 @@ public class ProjectInfoVO implements Serializable {
     @ApiModelProperty("项目亮点")
     private String highlight;
 
-    @JsonIgnore
     @ApiModelProperty("标价")
     private BigDecimal price;
 

+ 25 - 4
nightFragrance-massage/src/main/resources/mapper/massage/MaTechnicianMapper.xml

@@ -586,19 +586,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
         FROM ma_technician t
         <!-- 关联项目表以获取价格和分类信息 -->
-        LEFT JOIN ma_project p ON t.id = p.merchant_id AND p.audit_status = 1 AND p.is_delete = 0
+        LEFT JOIN ma_project p ON t.id = p.merchant_id AND p.audit_status = 1 AND p.is_delete = 0 AND p.project_is_enable = 0
         LEFT JOIN t_address ta ON t.id = ta.merchant_id AND ta.user_type = 2 AND ta.is_default = 1 AND ta.is_delete = 0
+        LEFT JOIN project proj ON p.project_id = proj.id AND proj.is_delete = 0 AND proj.status = 0
+        LEFT JOIN service_category sc ON proj.category_id = sc.id AND sc.is_delete = 0 AND sc.is_online = 1
 
         <where>
             <!-- 基础状态过滤 -->
             AND t.audit_status = 1
             AND t.merchant_status = 0
             AND t.is_delete = 0
-            AND p.project_is_enable = 0
+
 
             <!-- Tab分类筛选 -->
-            <if test="dto.projectId != null">
-                AND p.id = #{dto.projectId}
+            <if test="dto.categoryId != null">
+                AND sc.id = #{dto.categoryId}
             </if>
 
             <!-- 筛选:极速达 (距离 <= 5km) -->
@@ -630,4 +632,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ORDER BY distance ASC
     </select>
 
+    <select id="getByMerchantProject" resultType="com.ylx.project.domain.bookMerchant.vo.ProjectInfoVO">
+        SELECT
+            p.id AS p_id,
+            IFNULL(mp.project_name, p.title) AS title,
+            IFNULL(mp.project_duration, p.standard_duration) AS standard_duration,
+            p.unit_type,
+            p.cover,
+            p.highlight,
+            mp.project_current_price AS current_price
+        FROM ma_project mp
+        INNER JOIN project p ON mp.project_id = p.id AND p.is_delete = 0 AND p.status = 0
+        WHERE mp.merchant_id = #{dto.id}
+          AND p.category_id = #{dto.categoryId}
+          AND mp.is_delete = 0
+          AND mp.audit_status = 1
+          AND mp.project_is_enable = 0
+        ORDER BY mp.create_time DESC
+    </select>
+
 </mapper>