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

获取按摩商品分页数据接口

wangzhijun преди 14 часа
родител
ревизия
437d4a80fe

+ 10 - 1
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/ProductSelectionController.java

@@ -3,7 +3,9 @@ package com.ylx.web.controller.massage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.common.core.domain.R;
 import com.ylx.massage.domain.dto.OptionDTO;
+import com.ylx.massage.domain.dto.ServiceOptionDTO;
 import com.ylx.massage.domain.vo.ProductOptionVO;
+import com.ylx.massage.domain.vo.ProductServiceOptionVO;
 import com.ylx.massage.service.ProductSelectionService;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -22,11 +24,18 @@ public class ProductSelectionController {
     @Resource
     private ProductSelectionService productSelectionService;
 
-    @ApiOperation("获取广誉远商品")
+    @ApiOperation("查询商品列表(支持服务与实物)")
     @PostMapping(value = "/options")
     public R<Page<ProductOptionVO>> optionsPage( @RequestBody OptionDTO dto) {
         Page<ProductOptionVO> pageData = this.productSelectionService.optionsPage(dto);
         return R.ok(pageData);
     }
 
+    @ApiOperation("获取服务商品列表")
+    @PostMapping(value = "/options/service")
+    public R<Page<ProductServiceOptionVO>> queryServicePage(@RequestBody ServiceOptionDTO dto) {
+        Page<ProductServiceOptionVO> pageData = this.productSelectionService.serviceOptionsPage(dto);
+        return R.ok(pageData);
+    }
+
 }

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/domain/dto/OptionDTO.java

@@ -10,7 +10,7 @@ public class OptionDTO extends Page {
     @ApiModelProperty("商品名称")
     private String title;
 
-    @ApiModelProperty("商品类型:0-服务商品 1-积分商品")
+    @ApiModelProperty("商品类型:0-按摩商品 1-积分商品")
     private Integer productType;
 
 }

+ 11 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/dto/ServiceOptionDTO.java

@@ -0,0 +1,11 @@
+package com.ylx.massage.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ServiceOptionDTO extends OptionDTO {
+
+    @ApiModelProperty("可服务地区code")
+    private String areaCode;
+}

+ 26 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/ProductServiceOptionVO.java

@@ -0,0 +1,26 @@
+package com.ylx.massage.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ProductServiceOptionVO extends ProductOptionVO{
+
+    @ApiModelProperty("地区code")
+    private String areaCode;
+
+    @ApiModelProperty("地区名称")
+    private String areaName;
+
+    @ApiModelProperty("价格")
+    private BigDecimal price;
+
+    @ApiModelProperty("商户名称")
+    private String merchantName;
+
+    @ApiModelProperty("商户ID")
+    private String merchantId;
+
+}

+ 20 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/enums/ProductTypeEnum.java

@@ -0,0 +1,20 @@
+package com.ylx.massage.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum ProductTypeEnum {
+
+    MASSAGE_SERVICE(0, "按摩商品"),
+    INTEGRAL_GOODS(1, "积分商品");
+
+    private final Integer code;
+
+    private final String desc;
+
+    ProductTypeEnum(Integer code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+}

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

@@ -1,9 +1,12 @@
 package com.ylx.massage.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.massage.domain.dto.OptionDTO;
+import com.ylx.massage.domain.dto.ServiceOptionDTO;
 import com.ylx.massage.domain.vo.ProductOptionVO;
+import com.ylx.massage.domain.vo.ProductServiceOptionVO;
 import org.apache.ibatis.annotations.Mapper;
 import com.ylx.massage.domain.TXiangmu;
 import org.apache.ibatis.annotations.Param;
@@ -17,4 +20,5 @@ public interface TXiangmuMapper extends BaseMapper<TXiangmu> {
     Page<ProductOptionVO> selectOptionUnionPage(Page<ProductOptionVO> page, @Param("dto") OptionDTO dto);
 
 
+    Page<ProductServiceOptionVO> selectServiceOptionsPage(Page page, @Param("dto") ServiceOptionDTO dto);
 }

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

@@ -2,8 +2,12 @@ package com.ylx.massage.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.massage.domain.dto.OptionDTO;
+import com.ylx.massage.domain.dto.ServiceOptionDTO;
 import com.ylx.massage.domain.vo.ProductOptionVO;
+import com.ylx.massage.domain.vo.ProductServiceOptionVO;
 
 public interface ProductSelectionService {
     Page<ProductOptionVO> optionsPage(OptionDTO dto);
+
+    Page<ProductServiceOptionVO> serviceOptionsPage(ServiceOptionDTO dto);
 }

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

@@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.massage.domain.TXiangmu;
 import com.ylx.massage.domain.dto.OptionDTO;
+import com.ylx.massage.domain.dto.ServiceOptionDTO;
 import com.ylx.massage.domain.vo.ProductOptionVO;
+import com.ylx.massage.domain.vo.ProductServiceOptionVO;
 import com.ylx.massage.domain.vo.TXiangmuDetailVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -23,4 +25,6 @@ public interface TXiangmuService extends IService<TXiangmu> {
     TXiangmuDetailVo details(TXiangmu xiangmu);
 
     IPage<ProductOptionVO> selectOptionUnionPage(Page page, OptionDTO dto);
+
+    Page<ProductServiceOptionVO> selectServiceOptionsPage(Page page, ServiceOptionDTO dto);
 }

+ 11 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/ProductSelectionServiceImpl.java

@@ -7,7 +7,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.massage.domain.Product;
 import com.ylx.massage.domain.TXiangmu;
 import com.ylx.massage.domain.dto.OptionDTO;
+import com.ylx.massage.domain.dto.ServiceOptionDTO;
 import com.ylx.massage.domain.vo.ProductOptionVO;
+import com.ylx.massage.domain.vo.ProductServiceOptionVO;
+import com.ylx.massage.enums.ProductTypeEnum;
 import com.ylx.massage.service.ProductSelectionService;
 import com.ylx.massage.service.ProductService;
 import com.ylx.massage.service.TXiangmuService;
@@ -33,12 +36,12 @@ public class ProductSelectionServiceImpl implements ProductSelectionService {
         Integer productType = dto.getProductType();
 
         // 1. 只查积分商品 (Type = 1)
-        if (productType != null && productType == 1) {
+        if (productType != null && productType.equals(ProductTypeEnum.INTEGRAL_GOODS.getCode())) {
             return queryIntegralProducts(page, dto);
         }
 
         // 2. 只查项目/服务商品 (Type = 0)
-        if (productType != null && productType == 0) {
+        if (productType != null && productType.equals(ProductTypeEnum.MASSAGE_SERVICE.getCode())) {
             return queryProjectProducts(page, dto);
         }
 
@@ -46,6 +49,12 @@ public class ProductSelectionServiceImpl implements ProductSelectionService {
         return queryAllProductsUnion(page, dto);
     }
 
+    @Override
+    public Page<ProductServiceOptionVO> serviceOptionsPage(ServiceOptionDTO dto) {
+        Page<ProductServiceOptionVO> resultPage = xiangmuService.selectServiceOptionsPage(new Page(dto.getCurrent(), dto.getSize()), dto);
+        return resultPage;
+    }
+
     /**
      * 查询积分商品
      */

+ 7 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TXiangmuServiceImpl.java

@@ -13,7 +13,9 @@ import com.ylx.massage.domain.TJs;
 import com.ylx.massage.domain.TJsDay;
 import com.ylx.massage.domain.TXiangmu;
 import com.ylx.massage.domain.dto.OptionDTO;
+import com.ylx.massage.domain.dto.ServiceOptionDTO;
 import com.ylx.massage.domain.vo.ProductOptionVO;
+import com.ylx.massage.domain.vo.ProductServiceOptionVO;
 import com.ylx.massage.domain.vo.TXiangmuDetailVo;
 import com.ylx.massage.mapper.TJsDayMapper;
 import com.ylx.massage.mapper.TXiangmuMapper;
@@ -98,4 +100,9 @@ public class TXiangmuServiceImpl extends ServiceImpl<TXiangmuMapper, TXiangmu> i
     public IPage<ProductOptionVO> selectOptionUnionPage(Page page, OptionDTO dto) {
         return baseMapper.selectOptionUnionPage(page, dto);
     }
+
+    @Override
+    public Page<ProductServiceOptionVO> selectServiceOptionsPage(Page page, ServiceOptionDTO dto) {
+        return baseMapper.selectServiceOptionsPage(page, dto);
+    }
 }

+ 27 - 41
nightFragrance-massage/src/main/java/com/ylx/point/service/impl/PointUserActivityTaskCompletionServiceImpl.java

@@ -163,38 +163,25 @@ public class PointUserActivityTaskCompletionServiceImpl extends ServiceImpl<Poin
         }
 
         Long activityId = activity.getId();
-        PointActivityTypeEnum activityTypeEnum = PointActivityTypeEnum.valueOf(activity.getActivityType());
+        Integer activityType = activity.getActivityType();
         PointActivityTaskTypeEnum taskTypeEnum = PointActivityTaskTypeEnum.getByInfo(task.getTaskName());
         int targetCount = Integer.parseInt(task.getTriggerValue());
-        boolean isVerified;
-        String taskName;
 
         // 4. 任务校验逻辑
-        if (activityTypeEnum == PointActivityTypeEnum.SIGN_TASK) {
-            // 签到任务:今日未完成才可领取
-            taskName = TaskNameEnum.USER_SIGN_IN.getInfo();
-            if (isTodayCompleted(openId, activityId, taskId, taskTypeEnum.getCode())) {
-                throw new ServiceException("今日已签到,请勿重复操作");
-            }
-            isVerified = true;
-        } else if (activityTypeEnum == PointActivityTypeEnum.DAILY_ACTIVITY) {
-            // 每日任务:今日未完成
-            taskName = getTaskNameByType(taskTypeEnum);
-            if (isTodayCompleted(openId, activityId, taskId, taskTypeEnum.getCode())) {
-                throw new ServiceException("今日任务已完成,请勿重复领取");
-            }
-            isVerified = true;
-        } else if (activityTypeEnum == PointActivityTypeEnum.NEW_USER_ACTIVITY || activityTypeEnum == PointActivityTypeEnum.MONTHLY_ACTIVITY) {
-            // 新手/月度任务:校验业务数据
-            taskName = getTaskNameByType(taskTypeEnum);
-            Date queryTime = getQueryStartTime(activity.getIsPermanent(), activity.getStartTime(), activity.getActivityType());
-            isVerified = checkBusinessData(openId, taskTypeEnum, queryTime, targetCount);
-        } else {
+        if (ObjectUtil.notEqual(PointActivityTypeEnum.DAILY_ACTIVITY.getCode(), activityType) ||
+                ObjectUtil.notEqual(PointActivityTypeEnum.NEW_USER_ACTIVITY.getCode(), activityType) ||
+                ObjectUtil.notEqual(PointActivityTypeEnum.MONTHLY_ACTIVITY.getCode(), activityType)) {
             throw new ServiceException("不支持的活动类型");
         }
 
+        // 每日/新手/月度任务:校验业务数据
+        String taskName = getTaskNameByType(taskTypeEnum);
+        // 分享服务号、浏览动态和浏览商户
+        boolean isVerified = checkBusinessData(taskTypeEnum);
+
         // 5. 校验通过 → 发放奖励
         if (isVerified) {
+            Date queryTime = getQueryStartTime(activity.getIsPermanent(), activity.getActivityType());
             // 防重复发奖:已达标则直接返回
             PointUserActivityTaskCompletion record = this.getTaskRecord(openId, activityId, taskId, taskTypeEnum.getCode());
             if (record != null && record.getCompletedCount() >= targetCount) {
@@ -231,38 +218,37 @@ public class PointUserActivityTaskCompletionServiceImpl extends ServiceImpl<Poin
     }
 
     /**
-     * 校验业务数据(订单/充值) JDK8 兼容
+     * 校验业务数据(只针对:分享服务号、浏览动态和浏览商户)
      */
-    private boolean checkBusinessData(String openId, PointActivityTaskTypeEnum taskType, Date queryTime, int targetCount) {
-        if (taskType == PointActivityTaskTypeEnum.COMPLETE_ORDER) {
-            return orderService.countCompletedOrders(openId, queryTime) >= targetCount;
-        } else if (taskType == PointActivityTaskTypeEnum.RECHARGE_TASK) {
-            return rechargeService.countSuccessRecharges(openId, queryTime) >= targetCount;
-        } else if (taskType == PointActivityTaskTypeEnum.SHARE_SERVICE
+    private boolean checkBusinessData(PointActivityTaskTypeEnum taskType) {
+        boolean bool = false;
+        if (taskType == PointActivityTaskTypeEnum.SHARE_SERVICE
                 || taskType == PointActivityTaskTypeEnum.BROWLE_NEWS
                 || taskType == PointActivityTaskTypeEnum.BROWLE_MERCHANT) {
-            return true;
-        } else {
-            return false;
+            bool = true;
         }
+        return bool;
     }
 
     /**
-     * 获取查询开始时间 JDK8 兼容
+     * 获取查询开始时间,
+     * 永久任务、新手活动:null
+     * 每日活动: 当天0点0分0秒
+     * 每月活动:当前月的第一天的0点0分0秒
      */
-    private Date getQueryStartTime(String isPermanent, Date startTime, Integer activityType) {
+    private Date getQueryStartTime(String isPermanent, Integer activityType) {
+        Date StartTime = null;
         // 永久任务:查询全部历史
         if (StrUtil.equals(isPermanent, "1")) {
-            return null;
+            return StartTime;
         }
         PointActivityTypeEnum typeEnum = PointActivityTypeEnum.valueOf(activityType);
         if (typeEnum == PointActivityTypeEnum.DAILY_ACTIVITY) {
-            return DateUtil.beginOfDay(new Date());
+            StartTime = DateUtil.beginOfDay(new Date());
         } else if (typeEnum == PointActivityTypeEnum.MONTHLY_ACTIVITY) {
-            return DateUtil.beginOfMonth(new Date());
-        } else {
-            return startTime;
+            StartTime = DateUtil.beginOfMonth(new Date());
         }
+        return StartTime;
     }
 
     /**
@@ -330,7 +316,7 @@ public class PointUserActivityTaskCompletionServiceImpl extends ServiceImpl<Poin
                 try {
                     PointActivity activity = activityMap.get(task.getActivityId());
                     int targetCount = Integer.parseInt(task.getTriggerValue());
-                    Date queryTime = getQueryStartTime(activity.getIsPermanent(), activity.getStartTime(), typeCode);
+                    Date queryTime = getQueryStartTime(activity.getIsPermanent(), typeCode);
                     int completed = countFunction.apply(queryTime);
 
                     if (completed < targetCount) {

+ 66 - 0
nightFragrance-massage/src/main/resources/mapper/massage/TXiangmuMapper.xml

@@ -57,4 +57,70 @@
         ) as temp_table
     </select>
 
+    <!-- 结果集映射保持不变 -->
+    <resultMap id="ServiceOptionsVOMap" type="com.ylx.massage.domain.vo.ProductServiceOptionVO">
+        <result column="id" property="id"/>
+        <result column="title" property="title"/>
+        <result column="productType" property="productType"/>
+        <result column="serviceAreaCode" property="areaCode"/>
+        <result column="serviceAreaName" property="areaName"/>
+        <result column="price" property="price"/>
+        <result column="merchantName" property="merchantName"/>
+        <result column="merchantId" property="merchantId"/>
+    </resultMap>
+
+    <select id="selectServiceOptionsPage" resultMap="ServiceOptionsVOMap">
+        SELECT
+            p.c_id AS id,
+            p.c_title AS title,
+            p.project_type AS productType,
+            p.d_price AS price,
+
+            '广誉源' AS merchantName,
+            CAST(FLOOR(100000 + RAND() * 900000) AS UNSIGNED) AS merchantId,
+
+
+            CASE
+
+                WHEN #{dto.areaCode} IS NOT NULL THEN (SELECT name FROM area WHERE code = #{dto.areaCode})
+
+
+                ELSE (
+                    SELECT GROUP_CONCAT(DISTINCT a.name SEPARATOR ',')
+                    FROM t_js j_inner
+                             JOIN area a ON FIND_IN_SET(a.code, j_inner.service_area_codes) > 0
+                    WHERE j_inner.is_delete = 0
+                      AND j_inner.n_tong = 1
+                      AND CONCAT(',', j_inner.c_bh_list, ',') LIKE CONCAT('%,', p.c_id, ',%')
+                )
+                END AS serviceAreaName,
+
+            #{dto.areaCode} AS serviceAreaCode
+
+        FROM
+            t_xiangmu p
+
+        WHERE
+            p.is_delete = 0
+          AND p.project_type = '1'
+
+          AND EXISTS (
+            SELECT 1
+            FROM t_js j
+            WHERE j.is_delete = 0
+              AND j.n_tong = 1
+              AND (
+                FIND_IN_SET(#{dto.areaCode}, j.service_area_codes) > 0
+                    OR
+                #{dto.areaCode} IS NULL
+                )
+              AND CONCAT(',', j.c_bh_list, ',') LIKE CONCAT('%,', p.c_id, ',%')
+        )
+
+        GROUP BY
+            p.c_id
+        ORDER BY
+            MAX(p.create_time) DESC
+    </select>
+
 </mapper>