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

添加调取本地生活抽奖规则查询接口

wangzhijun преди 1 седмица
родител
ревизия
61288e3fbf

+ 62 - 0
nightFragrance-massage/src/main/java/com/ylx/lottery/domain/vo/LocalActivityTableVO.java

@@ -0,0 +1,62 @@
+package com.ylx.lottery.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+public class LocalActivityTableVO implements Serializable {
+    private static final long serialVersionUID = -6758927198878789658L;
+
+    @ApiModelProperty("ID")
+    private String id;
+
+    @ApiModelProperty("标题")
+    private String title;
+
+    @ApiModelProperty("说明")
+    private String instructions;
+
+    @ApiModelProperty("开始时间")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty("结束时间")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty("用户类型")
+    private String userType;
+
+    @ApiModelProperty("用户等级ID")
+    private String userLevelId;
+
+    @ApiModelProperty("奖品类型")
+    private String awardType;
+
+    @ApiModelProperty("转盘ID")
+    private String turntableId;
+
+    @ApiModelProperty("类型 6-报价 7-签到 8-出单 9-承保")
+    private String type;
+
+    @ApiModelProperty("背景图")
+    private String backImage;
+
+    @ApiModelProperty("报价次数")
+    private String qutNum;
+
+    @ApiModelProperty("报价获得抽奖次数")
+    private String qutLotteryNum;
+
+    @ApiModelProperty("报价最大抽奖次数")
+    private String qutLotteryMax;
+
+    @ApiModelProperty(value = "是否是商品商户 1 商品 2 商户")
+    private String isProduct;
+
+    @ApiModelProperty(value = "指定商品id")
+    private String productId;
+
+}

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

@@ -0,0 +1,51 @@
+package com.ylx.lottery.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+public class LotteryActivityAwardVO implements Serializable {
+    private static final long serialVersionUID = -6917976093671797777L;
+
+    @ApiModelProperty("奖品ID")
+    private String id;
+
+    @ApiModelProperty("活动ID")
+    private String activityId;
+
+    @ApiModelProperty("奖品类型 1-现金 2-积分 5-感谢参与 6-会员")
+    private Integer awardType;
+
+    @ApiModelProperty("优惠券ID")
+    private String couponId;
+
+    @ApiModelProperty("优惠券名称")
+    private String couponName;
+
+    @ApiModelProperty("奖品图标")
+    private String icon;
+
+    @ApiModelProperty("中奖概率")
+    private Integer winningProbability;
+
+    @ApiModelProperty("兑换类型")
+    private Integer redemptionType;
+
+    @ApiModelProperty("奖品名称")
+    private String awardName;
+
+    @ApiModelProperty("积分数量")
+    private Integer pointNum;
+
+    @ApiModelProperty("红包金额")
+    private BigDecimal redAmount;
+
+    @ApiModelProperty("付费会员ID")
+    private Long paidMemberId;
+
+    @ApiModelProperty("付费会员规则ID")
+    private Long paidMemberRulesId;
+}

+ 55 - 0
nightFragrance-massage/src/main/java/com/ylx/lottery/domain/vo/LotteryActivityVO.java

@@ -0,0 +1,55 @@
+package com.ylx.lottery.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.List;
+
+@Data
+public class LotteryActivityVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("活动ID")
+    private String id;
+
+    @ApiModelProperty("活动名称")
+    private String activityName;
+
+    @ApiModelProperty("场景编码")
+    private Integer scene;
+
+    @ApiModelProperty("场景名称")
+    private String sceneName;
+
+    @ApiModelProperty("类型")
+    private Integer type;
+
+    @ApiModelProperty("活动开始时间")
+    private LocalDate activityStartTime;
+
+    @ApiModelProperty("活动结束时间")
+    private LocalDate activityEndTime;
+
+    @ApiModelProperty("参与规则")
+    private Integer participationRules;
+
+    @ApiModelProperty("活动背景图")
+    private String activityBackgroundImage;
+
+    @ApiModelProperty("海报背景图")
+    private String posterBackgroundImage;
+
+    @ApiModelProperty("活动链接")
+    private String activityUrl;
+
+    @ApiModelProperty("活动描述")
+    private String activityDescribe;
+
+    @ApiModelProperty("奖品列表")
+    private List<LotteryActivityAwardVO> lotteryActivityAwards;
+
+    @ApiModelProperty("本地活动表")
+    private List<LocalActivityTableVO> localActivityTables;
+}

+ 5 - 2
nightFragrance-massage/src/main/java/com/ylx/lottery/domain/vo/LotteryCountResponseVO.java

@@ -2,8 +2,11 @@ package com.ylx.lottery.domain.vo;
 
 import lombok.Data;
 
+import java.io.Serializable;
+
 @Data
-public class LotteryCountResponseVO {
+public class LotteryCountResponseVO<L> implements Serializable {
+    private static final long serialVersionUID = 3315449915058182289L;
 
     /**
      * 请求是否成功
@@ -24,7 +27,7 @@ public class LotteryCountResponseVO {
      * 具体的业务结果数据
      * 此处示例为String,实际开发中可根据需要改为泛型 <T>
      */
-    private Object result;
+    private L result;
 
     /**
      * 服务器响应时间戳

+ 5 - 0
nightFragrance-massage/src/main/java/com/ylx/lottery/service/LotteryCountService.java

@@ -1,9 +1,14 @@
 package com.ylx.lottery.service;
 
+import com.ylx.lottery.domain.vo.LotteryActivityVO;
 import com.ylx.usercenter.domain.dto.UnifiedUserCenterDTO;
 
+import java.util.List;
+
 public interface LotteryCountService {
 
     boolean batchAdd(UnifiedUserCenterDTO dto);
 
+    List<LotteryActivityVO>  queryActivityRules();
+
 }

+ 65 - 7
nightFragrance-massage/src/main/java/com/ylx/lottery/service/impl/LotteryCountServiceImpl.java

@@ -1,15 +1,16 @@
 package com.ylx.lottery.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.TypeReference;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.ylx.common.exception.ServiceException;
 import com.ylx.lottery.domain.LotteryCountLog;
 import com.ylx.lottery.domain.dto.LotteryCountDTO;
+import com.ylx.lottery.domain.vo.LotteryActivityVO;
 import com.ylx.lottery.domain.vo.LotteryCountResponseVO;
 import com.ylx.lottery.domain.vo.LotteryStatVO;
 import com.ylx.lottery.service.LotteryCountLogService;
@@ -18,10 +19,10 @@ import com.ylx.usercenter.domain.dto.UnifiedUserCenterDTO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import com.alibaba.fastjson.TypeReference;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 @Slf4j
 @Service
@@ -32,6 +33,10 @@ public class LotteryCountServiceImpl implements LotteryCountService {
 
     // 定义接口路径常量
     private static final String LOTTERY_COUNT_ADD_PATH = "/lottery/lotteryUserLotteryCount/batchAdd";
+    private static final String LOTTERY_ACTIVITY_LIST_PATH = "/lottery/lotteryActivity/queryActivityList";
+    private static final int SCENE_CODE = 2;
+    private static final int DEFAULT_TIMEOUT = 5000; // 5秒超时
+
     @Resource
     private LotteryCountLogService lotteryCountLogService;
 
@@ -69,7 +74,7 @@ public class LotteryCountServiceImpl implements LotteryCountService {
             String jsonParam = JSON.toJSONString(dtoList);
 
             // 3. 发送请求
-            String result = HttpUtil.post(url, jsonParam);
+            String result = HttpUtil.post(url, jsonParam, DEFAULT_TIMEOUT);
 
             // 4. 校验结果
             if (StrUtil.isEmpty(result)) {
@@ -77,15 +82,15 @@ public class LotteryCountServiceImpl implements LotteryCountService {
             }
 
             // 5. 解析结果
-            LotteryCountResponseVO response = JSON.parseObject(
+            LotteryCountResponseVO<String> response = JSON.parseObject(
                     result,
-                    new TypeReference<LotteryCountResponseVO>() {
+                    new TypeReference<LotteryCountResponseVO<String>>() {
                     }
             );
 
             // 4. 处理业务状态
             if (!response.isSuccess()) {
-                log.warn("抽奖次数批量添加接口失败失败: code={}, msg={}",  response.getCode(), response.getMessage());
+                log.warn("抽奖次数批量添加接口失败失败: code={}, msg={}", response.getCode(), response.getMessage());
                 throw new ServiceException("远程接口返回失败: " + response.getMessage());
             }
 
@@ -101,6 +106,59 @@ public class LotteryCountServiceImpl implements LotteryCountService {
 
     }
 
+    @Override
+    public List<LotteryActivityVO> queryActivityRules() {
+        try {
+            // 1. 构建请求参数
+            String url = localLiveBaseUrl + LOTTERY_ACTIVITY_LIST_PATH;
+            Map<String, Object> params = Collections.singletonMap("scene", SCENE_CODE);
+
+            // 2. 发送请求
+            String resultJson = HttpUtil.get(url, params, DEFAULT_TIMEOUT);
+
+            // 3. 校验结果
+            if (StrUtil.isEmpty(resultJson)) {
+                throw new RuntimeException("抽奖规则查询接口失败:接口返回空结果");
+            }
+
+            // 4. 解析结果
+            LotteryCountResponseVO<List<LotteryActivityVO>> response = JSON.parseObject(
+                    resultJson,
+                    new TypeReference<LotteryCountResponseVO<List<LotteryActivityVO>>>() {
+                    }
+            );
+
+            // 5. 处理业务状态
+            if (ObjUtil.isNull(response) || !response.isSuccess()) {
+                String msg = ObjUtil.isNotNull(response) ? response.getMessage() : "未知错误";
+                Integer code = ObjUtil.isNotNull(response) ? response.getCode() : -1;
+
+                log.warn("抽奖规则查询接口业务失败: code={}, msg={}", code, msg);
+                throw new ServiceException("远程接口返回失败: " + msg);
+            }
+
+            // 6. 获取数据列表
+            List<LotteryActivityVO> activityList = response.getResult();
+
+            if (CollUtil.isEmpty(activityList)) {
+                log.info("未查询到相关活动数据");
+                return Collections.emptyList();
+            }
+
+            log.info("成功获取抽奖活动列表,数量: {}", activityList.size());
+
+            return activityList;
+
+        } catch (ServiceException e) {
+            // 透传业务异常,不要重复包装
+            throw e;
+        } catch (Exception e) {
+            log.error("抽奖规则查询接口发生系统异常", e);
+            // 优化点:只抛出消息,不要直接把整个 Exception 对象 toString() 拼接到字符串里
+            throw new ServiceException("抽奖规则查询接口异常: " + e.getMessage());
+        }
+    }
+
     private void updateSyncStatus(String userId) {
         LambdaUpdateWrapper<LotteryCountLog> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.eq(LotteryCountLog::getUserId, userId)