From ea1a62ba6484d6c6cb1ca67dcea938a95ba18fc6 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期一, 26 五月 2025 18:26:26 +0800
Subject: [PATCH] 新增加用户端接口

---
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java                                   |   21 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Banner.java                                      |    7 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ShopAppointmentTimeDto.java                          |   18 
 ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/PopMapper.xml                                                     |   13 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopNonAppointableTimeServiceImpl.java                |   15 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventQuestionsService.java                |   11 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppPopVo.java                                             |    7 
 ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEventPrize.java                                     |   53 +
 ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/QuickEntryMapper.xml                                              |   23 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventQuestionsServiceImpl.java            |   15 
 ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/service/LotteryEventClient.java                                   |    2 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java                                |   83 +-
 ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/AdvertMapper.xml                                                  |   17 
 ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEventQuestionsAnswers.java                      |   54 +
 ruoyi-modules/ruoyi-order/pom.xml                                                                                             |    6 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/ShopAppointableTime.java                       |   54 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventService.java                             |   34 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppLotteryEventPageVo.java                                  |   30 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventPrizeServiceImpl.java                |   15 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/miniapp/AppHomeController.java                               |   60 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventQuestionsAnswersMapper.java                |   11 
 ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/UserLotteryEventMapper.xml                                        |    5 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopNonAppointableTimeService.java                         |   11 
 ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/BannerMapper.xml                                                  |   13 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Advert.java                                      |    9 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppIntegralController.java                       |   27 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Pop.java                                         |    7 
 ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEventQuestions.java                                 |   37 +
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java                        |   14 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventService.java                         |   12 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventMapper.java                            |   11 
 ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedissonConfig.java                            |   38 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventPrizeMapper.java                           |   11 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java                          |   36 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppLotteryEventController.java                     |  113 +++
 ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEvent.java                                      |   74 ++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppointmentTimeDto.java                              |   18 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventQuestionsAnswersMapper.java            |   11 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventServiceImpl.java                 |   15 
 ruoyi-modules/ruoyi-member/pom.xml                                                                                            |    6 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppAdvertVo.java                                          |   21 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopAppointableTimeServiceImpl.java                   |   13 
 ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEvent.java                                          |   23 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerLotteryEventController.java                    |    7 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/miniapp/AppHomeController.java                           |   14 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventQuestionsService.java                    |   11 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteCouponFallbackFactory.java                        |    9 
 ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/UserLotteryEventQuestionsMapper.xml                               |    5 
 ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEventQuestions.java                             |   49 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventMapper.java                                |   15 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java                    |  138 +++
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopAppointableTimeMapper.java                              |   11 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java                            |    3 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppQuickEntryVo.java                                      |   24 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberCoupon.java                            |    2 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventQuestionsMapper.java                       |   11 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/LotteryEventListDto.java                             |   21 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/LotteryEventInfoVo.java                                     |   28 
 ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventPrizeMapper.xml                                       |    5 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java                            |   30 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopNonAppointableTimeMapper.java                           |   11 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventQuestionsMapper.java                   |   11 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventPrizeService.java                        |   11 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventQuestionsAnswersService.java         |   22 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsAnswersServiceImpl.java |   48 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppPlaceOrderVo.java                                        |   11 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteCouponService.java                                |   24 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/QuickEntry.java                                  |    7 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java                              |   24 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventQuestionsAnswersServiceImpl.java     |   15 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/Shop.java                                      |   14 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java                     |  170 ++++
 ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventMapper.xml                                            |   27 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/IntegralRecord.java                              |    2 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventQuestionsAnswersService.java             |   11 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/ShopNonAppointableTime.java                    |   41 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/LotteryEventVo.java                                         |   29 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsServiceImpl.java        |   15 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppBannerVo.java                                          |   19 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java                             |   25 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopAppointableTimeService.java                            |   11 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/UserLotteryEventVo.java                                     |   22 
 ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEventQuestionsAnswers.java                          |   39 +
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java                            |   27 
 84 files changed, 1,860 insertions(+), 233 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEvent.java b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEvent.java
index ab788a0..4d76a54 100644
--- a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEvent.java
+++ b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEvent.java
@@ -18,7 +18,7 @@
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
-@TableName("lottery_event")
+@TableName("t_lottery_event")
 public class LotteryEvent {
 	/**
 	 * 主键
@@ -41,15 +41,10 @@
 	@TableField("activity_type")
 	private Integer activityType;
 	/**
-	 * 抽奖总次数
+	 * 可抽奖次数
 	 */
-	@TableField("total_times")
-	private Integer totalTimes;
-	/**
-	 * 剩余次数
-	 */
-	@TableField("lave_times")
-	private Integer laveTimes;
+	@TableField("times")
+	private Integer times;
 	/**
 	 * 活动开始时间
 	 */
@@ -66,11 +61,21 @@
 	@TableField("interval_time")
 	private Integer intervalTime;
 	/**
+	 * 下单支付金额
+	 */
+	@TableField("pay_money")
+	private BigDecimal payMoney;
+	/**
 	 * 答题抽奖正确率%
 	 */
 	@TableField("accuracy")
 	private BigDecimal accuracy;
 	/**
+	 * 答题时间限制(分钟)
+	 */
+	@TableField("answering_time")
+	private Integer answeringTime;
+	/**
 	 * 封面图
 	 */
 	@TableField("cover_image")
diff --git a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEventPrize.java b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEventPrize.java
new file mode 100644
index 0000000..62e27a3
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEventPrize.java
@@ -0,0 +1,53 @@
+package com.ruoyi.goods.api.domain;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/12 9:50
+ */
+@Data
+@TableName("t_lottery_event_prize")
+public class LotteryEventPrize {
+	/**
+	 * 主键
+	 */
+	@TableId(value = "id",  type = IdType.AUTO)
+	private String id;
+	/**
+	 * 抽奖id
+	 */
+	@TableField("lottery_event_id")
+	private String lotteryEventId;
+	/**
+	 * 奖品类型(1=优惠券,2=平台商品,3=线下商品,4=积分)
+	 */
+	@TableField("prize_type")
+	private Integer prizeType;
+	/**
+	 * 奖品id
+	 */
+	@TableField("object_id")
+	private String objectId;
+	/**
+	 * 奖品名称
+	 */
+	@TableField("object_name")
+	private String objectName;
+	/**
+	 * 奖品数量
+	 */
+	@TableField("number")
+	private Integer number;
+	/**
+	 * 中奖率%
+	 */
+	@TableField("win_rate")
+	private BigDecimal winRate;
+}
diff --git a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEventQuestions.java b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEventQuestions.java
new file mode 100644
index 0000000..a85df08
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEventQuestions.java
@@ -0,0 +1,37 @@
+package com.ruoyi.goods.api.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 18:00
+ */
+@Data
+@TableName("t_lottery_event_questions")
+public class LotteryEventQuestions {
+	/**
+	 * 数据id
+	 */
+	@TableId(value = "id",  type = IdType.INPUT)
+	private String id;
+	/**
+	 * 抽奖活动id
+	 */
+	@TableField(value = "lottery_event_id")
+	private String lotteryEventId;
+	/**
+	 * 题干名称
+	 */
+	@TableField(value = "name")
+	private String name;
+	/**
+	 * 排序
+	 */
+	@TableField(value = "sort")
+	private Integer sort;
+	
+}
diff --git a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEventQuestionsAnswers.java b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEventQuestionsAnswers.java
new file mode 100644
index 0000000..167fba8
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/LotteryEventQuestionsAnswers.java
@@ -0,0 +1,39 @@
+package com.ruoyi.goods.api.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data; /**
+ * @author zhibing.pu
+ * @Date 2025/5/19 16:15
+ */
+@Data
+@TableName("t_lottery_event_questions_answers")
+public class LotteryEventQuestionsAnswers {
+	/**
+	 * id
+	 */
+	@TableId(value = "id",  type = IdType.INPUT)
+	private String id;
+	/**
+	 * 抽奖id
+	 */
+	@TableField(value = "lottery_event_id")
+	private String lotteryEventId;
+	/**
+	 * 抽奖答题id
+	 */
+	@TableField(value = "lottery_event_questions_id")
+	private String lotteryEventQuestionsId;
+	/**
+	 * 答案
+	 */
+	@TableField(value = "answer")
+	private String answer;
+	/**
+	 * 是否是正确答案(0=否,1=是)
+	 */
+	@TableField(value = "is_right")
+	private Integer isRight;
+}
diff --git a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEvent.java b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEvent.java
new file mode 100644
index 0000000..4dd2f3d
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEvent.java
@@ -0,0 +1,74 @@
+package com.ruoyi.goods.api.domain;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/12 10:34
+ */
+@Data
+@TableName("t_user_lottery_event")
+public class UserLotteryEvent {
+	/**
+	 * 主键
+	 */
+	@TableId(value = "id",  type = IdType.INPUT)
+	private String id;
+	/**
+	 * 用户id
+	 */
+	@TableField(value = "user_id")
+	private Long userId;
+	/**
+	 * 抽奖id
+	 */
+	@TableField(value = "lottery_event_id")
+	private String lotteryEventId;
+	/**
+	 * 抽奖奖品id
+	 */
+	@TableField(value = "lottery_event_prize_id")
+	private String lotteryEventPrizeId;
+	/**
+	 * 奖品类型(1=优惠券,2=平台商品,3=线下商品,4=积分,5=未中奖)
+	 */
+	@TableField(value = "prize_type")
+	private Integer prizeType;
+	/**
+	 * 奖品id
+	 */
+	@TableField(value = "object_id")
+	private String objectId;
+	/**
+	 * 奖品名称
+	 */
+	@TableField(value = "object_name")
+	private String objectName;
+	/**
+	 * 奖品数量
+	 */
+	@TableField(value = "number")
+	private Integer number;
+	/**
+	 * 中奖时间
+	 */
+	@TableField(value = "create_time")
+	private LocalDateTime createTime;
+	/**
+	 * 核销码
+	 */
+	@TableField(value = "verify_code")
+	private String verifyCode;
+	/**
+	 * 是否已核销(0=否,1=是)
+	 */
+	@TableField(value = "is_verify")
+	private Integer isVerify;
+	
+}
diff --git a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEventQuestions.java b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEventQuestions.java
new file mode 100644
index 0000000..a3a86c7
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEventQuestions.java
@@ -0,0 +1,49 @@
+package com.ruoyi.goods.api.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 用户抽奖答题记录
+ * @author zhibing.pu
+ * @Date 2025/5/19 16:01
+ */
+@Data
+@TableName("t_user_lottery_event_questions")
+public class UserLotteryEventQuestions {
+	/**
+	 * id
+	 */
+	@TableId(value = "id",  type = IdType.INPUT)
+	private String id;
+	/**
+	 * 用户id
+	 */
+	@TableField(value = "user_id")
+	private Long userId;
+	/**
+	 * 抽奖活动id
+	 */
+	@TableField(value = "lottery_event_id")
+	private String lotteryEventId;
+	/**
+	 * 答题开始时间
+	 */
+	@TableField(value = "create_time")
+	private LocalDateTime createTime;
+	/**
+	 * 答题结束时间
+	 */
+	@TableField(value = "end_time")
+	private LocalDateTime endTime;
+	/**
+	 * 状态(1=已开始,2=已结束)
+	 */
+	@TableField(value = "status")
+	private Integer status;
+}
diff --git a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEventQuestionsAnswers.java b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEventQuestionsAnswers.java
new file mode 100644
index 0000000..01a8100
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEventQuestionsAnswers.java
@@ -0,0 +1,54 @@
+package com.ruoyi.goods.api.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 用户抽奖答题记录
+ * @author zhibing.pu
+ * @Date 2025/5/19 16:01
+ */
+@Data
+@TableName("t_user_lottery_event_questions_answers")
+public class UserLotteryEventQuestionsAnswers {
+	/**
+	 * id
+	 */
+	@TableId(value = "id",  type = IdType.INPUT)
+	private String id;
+	/**
+	 * 用户id
+	 */
+	@TableField(value = "user_id")
+	private Long userId;
+	/**
+	 * 抽奖活动id
+	 */
+	@TableField(value = "lottery_event_id")
+	private String lotteryEventId;
+	/**
+	 * 抽奖活动题干id
+	 */
+	@TableField(value = "lottery_event_question_id")
+	private String lotteryEventQuestionId;
+	/**
+	 * 抽奖活动题干选项id
+	 */
+	@TableField(value = "lottery_event_questions_answers_id")
+	private String lotteryEventQuestionsAnswersId;
+	/**
+	 * 是否正确(0=否,1=是)
+	 */
+	@TableField(value = "is_correct")
+	private Integer isCorrect;
+	/**
+	 * 创建时间
+	 */
+	@TableField(value = "create_time")
+	private LocalDateTime createTime;
+}
diff --git a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/service/LotteryEventClient.java b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/service/LotteryEventClient.java
index 4ce86d5..42b6442 100644
--- a/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/service/LotteryEventClient.java
+++ b/ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/service/LotteryEventClient.java
@@ -23,6 +23,6 @@
 	 * @param activityType
 	 * @return
 	 */
-	@PostMapping("/lotteryEvent/getLotteryEventList")
+	@PostMapping("/mer/lotteryEvent/getLotteryEventList")
 	R<List<LotteryEvent>> getLotteryEventList(@RequestParam("activityType") Integer activityType);
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppointmentTimeDto.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppointmentTimeDto.java
new file mode 100644
index 0000000..abd8d5c
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppointmentTimeDto.java
@@ -0,0 +1,18 @@
+package com.ruoyi.system.api.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 14:49
+ */
+@Data
+@ApiModel
+public class AppointmentTimeDto {
+	@ApiModelProperty("门店id")
+	private Integer shopId;
+	@ApiModelProperty("预约时间(2025-01-01 14:00:00)")
+	private String time;
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/LotteryEventListDto.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/LotteryEventListDto.java
new file mode 100644
index 0000000..2fcc431
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/LotteryEventListDto.java
@@ -0,0 +1,21 @@
+package com.ruoyi.system.api.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 16:20
+ */
+@Data
+@ApiModel
+public class LotteryEventListDto extends AppBaseDto {
+	
+	@ApiModelProperty(name = "pagenum", value = "页码")
+	private Integer pageNum = 1;
+	
+	
+	@ApiModelProperty(name = "pagesize", value = "每页显示条数")
+	private Integer pageSize = 20;
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ShopAppointmentTimeDto.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ShopAppointmentTimeDto.java
new file mode 100644
index 0000000..ca62bf8
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ShopAppointmentTimeDto.java
@@ -0,0 +1,18 @@
+package com.ruoyi.system.api.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 14:38
+ */
+@Data
+public class ShopAppointmentTimeDto extends AppBaseDto{
+	
+	@ApiModelProperty(value = "请求对象id")
+	private String id;
+	
+	@ApiModelProperty(value = "查询时间(2025-01-01)")
+	private String date;
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberCoupon.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberCoupon.java
index 5330316..e0f3777 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberCoupon.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberCoupon.java
@@ -64,7 +64,7 @@
     @TableField("coupon_name")
     private String couponName;
     /**
-     * 发送类型1.手动领取2.指定发放
+     * 发送类型1.手动领取2.指定发放,3.抽奖领取
      */
     @TableField("send_type")
     private Integer sendType;
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/Shop.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/Shop.java
index 92890a1..68324fb 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/Shop.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/Shop.java
@@ -291,17 +291,23 @@
      */
     @TableField("shop_code")
     private String shopCode;
-
+    
     /**
      * 小鹅通讲师id
      */
     @TableField("xiaoe_user_id")
     private String xiaoeUserId;
-
-
+    
+    /**
+     * 预约状态(0=关,1=开)
+     */
+    @TableField("subscribe")
+    private Integer subscribe;
+    
+    
     @Override
     protected Serializable pkVal() {
         return this.shopId;
     }
-
+    
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/ShopAppointableTime.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/ShopAppointableTime.java
new file mode 100644
index 0000000..867c6fb
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/ShopAppointableTime.java
@@ -0,0 +1,54 @@
+package com.ruoyi.system.api.domain.poji.shop;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 14:54
+ */
+@Data
+@TableName
+public class ShopAppointableTime {
+	/**
+	 * 主键
+	 */
+	@TableId(value = "id", type = IdType.INPUT)
+	private String id;
+	/**
+	 * 商户id
+	 */
+	@TableField("shop_id")
+	private Integer shopId;
+	/**
+	 * 用户id
+	 */
+	@TableField("user_id")
+	private Long userId;
+	/**
+	 * 预约时间
+	 */
+	@TableField("appointable_time")
+	private String appointableTime;
+	/**
+	 * 状态(0=已取消,1=待确认,2=等待中,3=已结束)
+	 */
+	@TableField("status")
+	private Integer status;
+	/**
+	 * 添加时间
+	 */
+	@TableField("create_time")
+	private LocalDateTime createTime;
+	/**
+	 * 商家取消原因
+	 */
+	@TableField("reason")
+	private String reason;
+	
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/ShopNonAppointableTime.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/ShopNonAppointableTime.java
new file mode 100644
index 0000000..379f7e8
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/shop/ShopNonAppointableTime.java
@@ -0,0 +1,41 @@
+package com.ruoyi.system.api.domain.poji.shop;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 14:25
+ */
+@Data
+@ApiModel
+@TableName("t_shop_non_appointable_time")
+public class ShopNonAppointableTime {
+	/**
+	 * 主键
+	 */
+	@TableId(value = "id", type = IdType.INPUT)
+	private String id;
+	/**
+	 * 商户id
+	 */
+	@TableField("shop_id")
+	private Integer shopId;
+	/**
+	 * 不可预约开始时间
+	 */
+	@TableField("non_appointable_start_time")
+	@ApiModelProperty("不可预约开始时间")
+	private String nonAppointableStartTime;
+	/**
+	 * 不可预约结束时间
+	 */
+	@TableField("non_appointable_end_time")
+	@ApiModelProperty("不可预约结束时间")
+	private String nonAppointableEndTime;
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteCouponFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteCouponFallbackFactory.java
index 15b0547..e120368 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteCouponFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteCouponFallbackFactory.java
@@ -56,16 +56,21 @@
             public R useMemberCoupon(String memberCouponIds) {
                 return R.fail("使用优惠券失败" + throwable.getMessage());
             }
-
+    
             @Override
             public R backMemberCoupon(String memberCouponIds) {
                 return R.fail("回退优惠券失败" + throwable.getMessage());
             }
-
+    
             @Override
             public R sureMemberCoupon(MerVerifyMemberCouponDto merVerifyMemberCouponDto) {
                 return R.fail("确认核销优惠券失败" + throwable.getMessage());
             }
+    
+            @Override
+            public R addMemberCoupon(String couponId, Integer number, Long userId) {
+                return R.fail("手动添加用户优惠券失败:" + throwable.getMessage());
+            }
         };
     }
 
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java
index 94369ad..ec73b0e 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java
@@ -3,12 +3,12 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.system.api.domain.dto.*;
 import com.ruoyi.system.api.domain.poji.member.BirthdayCard;
+import com.ruoyi.system.api.domain.poji.member.Member;
 import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord;
 import com.ruoyi.system.api.domain.vo.*;
-import com.ruoyi.system.api.service.RemoteMemberService;
-import com.ruoyi.system.api.domain.poji.member.Member;
 import com.ruoyi.system.api.model.AppMiniLoginDto;
 import com.ruoyi.system.api.model.AppMiniLoginVo;
+import com.ruoyi.system.api.service.RemoteMemberService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.cloud.openfeign.FallbackFactory;
@@ -149,16 +149,22 @@
             public R verifyPrize(MerVerifyPrizeFinalDto merVerifyPrizeFinalDto) {
                 return R.fail("核销奖品失败:" + throwable.getMessage());
             }
-
+    
             @Override
             public R<List<Long>> listUserIdByAgeType(Integer ageType) {
                 return R.fail("获取用户id列表失败:" + throwable.getMessage());
             }
-
+    
             @Override
             public R<MgtBulletinBoardVo> boardMemberTotal(BoardMemberTotalDto boardMemberTotalDto) {
                 return R.fail(throwable.getMessage());
             }
+    
+    
+            @Override
+            public R addIntegralRecord(Integer integral, Long userId, String orderId) {
+                return R.fail("手动添加用户积分失败:" + throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteCouponService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteCouponService.java
index 04c6e7d..2194ecd 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteCouponService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteCouponService.java
@@ -11,6 +11,7 @@
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
@@ -81,15 +82,26 @@
      */
     @PostMapping("/coupon/backMemberCoupon")
     public R backMemberCoupon(@RequestBody String memberCouponIds);
-
-
+    
+    
     /**
-     * @description  确认核销优惠券
-     * @author  jqs
-     * @date    2023/8/15 11:37
      * @param merVerifyMemberCouponDto
-     * @return  R
+     * @return R
+     * @description 确认核销优惠券
+     * @author jqs
+     * @date 2023/8/15 11:37
      */
     @PostMapping("/coupon/verifyMemberCoupon")
     public R sureMemberCoupon(@RequestBody MerVerifyMemberCouponDto merVerifyMemberCouponDto);
+    
+    
+    /**
+     * 手动添加用户优惠券
+     *
+     * @param couponId
+     * @param number
+     * @return
+     */
+    @PostMapping("/coupon/addMemberCoupon")
+    R addMemberCoupon(@RequestParam("couponId") String couponId, @RequestParam("number") Integer number, @RequestParam("userId") Long userId);
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java
index c5cf9a8..6a1aa7a 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java
@@ -13,15 +13,16 @@
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
 @FeignClient(contextId = "remoteMemberService", value = ServiceNameConstants.MEMBER_SERVICE, fallbackFactory = RemoteMemberFallbackFactory.class)
 public interface RemoteMemberService {
-
+    
     @PostMapping("/member/getMember")
     public R<Member> getMember(@RequestBody Long userId);
-
+    
     /**
      * 小程序登录
      *
@@ -30,7 +31,7 @@
      */
     @PostMapping("/member/miniLogin")
     public R<AppMiniLoginVo> miniLogin(@RequestBody AppMiniLoginDto appMiniLoginDto);
-
+    
     /**
      * 小程序注册
      *
@@ -39,8 +40,8 @@
      */
     @PostMapping("/member/miniRegister")
     public R<AppMiniRegisterVo> miniRegister(@RequestBody AppMiniRegisterDto appUserRegisterDto);
-
-
+    
+    
     /**
      * 更新绑定
      *
@@ -49,7 +50,7 @@
      */
     @PostMapping("/member/updateMemberBinding")
     public R updateMemberBinding(@RequestBody AppMemberBindingDto appMemberBindingDto);
-
+    
     /**
      * 更新会员商品类型
      *
@@ -58,7 +59,7 @@
      */
     @PostMapping("/member/updateMemberGoodsType")
     public R updateMemberGoodsType(@RequestBody AppMemberGoodsTypeDto appMemberGoodsTypeDto);
-
+    
     /**
      * 通过手机号获取会员
      *
@@ -67,7 +68,7 @@
      */
     @PostMapping("/member/getMemberByMobile")
     public R<Member> getMemberByMobile(@RequestBody String mobile);
-
+    
     /**
      * 订单创建新用户
      *
@@ -76,7 +77,7 @@
      */
     @PostMapping("/member/createNewMember")
     public R createNewMember(@RequestBody Member member);
-
+    
     /**
      * @param tag
      * @return R
@@ -86,7 +87,7 @@
      */
     @PostMapping("/member/deleteMemberTag")
     public R deleteMemberTag(@RequestBody String tag);
-
+    
     /**
      * @param suggestTag
      * @return R
@@ -96,7 +97,7 @@
      */
     @PostMapping("/member/deleteMemberSuggestTag")
     public R deleteMemberSuggestTag(@RequestBody String suggestTag);
-
+    
     /**
      * @param mgtBaseBathDto
      * @return R<List < MgtSimpleMemberVo>>
@@ -106,7 +107,7 @@
      */
     @PostMapping("/member/listSimpleVoByIds")
     public R<List<MgtSimpleMemberVo>> listSimpleVoByIds(@RequestBody String userIds);
-
+    
     /**
      * @param mgtUserIdByKeywordDto
      * @return R<MgtUserIdByKeywordVo>
@@ -116,7 +117,7 @@
      */
     @PostMapping("/member/getUserIdByKeyword")
     public R<MgtUserIdByKeywordVo> getUserIdByKeyword(@RequestBody MgtUserIdByKeywordDto mgtUserIdByKeywordDto);
-
+    
     /**
      * @param
      * @return R<MgtBulletinBoardVo>
@@ -126,7 +127,7 @@
      */
     @PostMapping("/member/boardMemberTotal")
     public R<MgtBulletinBoardVo> boardMemberTotal(@RequestBody BoardMemberTotalDto boardMemberTotalDto);
-
+    
     /**
      * @param mgtActivityAgeDto
      * @return R<List < Long>>
@@ -136,8 +137,8 @@
      */
     @PostMapping("/member/listUserIdByAge")
     public R<List<Long>> listUserIdByAge(@RequestBody MgtActivityAgeDto mgtActivityAgeDto);
-
-
+    
+    
     /**
      * @param shopIdlist
      * @return R<List < Long>>
@@ -147,7 +148,7 @@
      */
     @PostMapping("/member/listUserIdByShopId")
     public R<List<Long>> listUserIdByShopId(@RequestBody List<Long> shopIdlist);
-
+    
     /**
      * @param shopIdlist
      * @return R<MgtShopTotalMemberVo>
@@ -157,7 +158,7 @@
      */
     @PostMapping("/member/getUserTotalByShopId")
     public R<MgtShopTotalMemberVo> getUserTotalByShopId(@RequestBody List<Long> shopIdlist);
-
+    
     /**
      * @param memberTotalChangeDto
      * @return R
@@ -167,8 +168,8 @@
      */
     @PostMapping("/member/changeMemberTotal")
     public R changeMemberTotal(@RequestBody MemberTotalChangeDto memberTotalChangeDto);
-
-
+    
+    
     /**
      * @param merTotalDto
      * @return R<MerOrderAgeUserVo>
@@ -178,7 +179,7 @@
      */
     @PostMapping("/member/listOrderAgeUser")
     public R<List<MerOrderAgeUserVo>> listOrderAgeUser(@RequestBody MerTotalDto merTotalDto);
-
+    
     /**
      * @param
      * @return R<Integer>
@@ -188,8 +189,8 @@
      */
     @PostMapping("/member/getUnReplaySuggestVo")
     public R<Integer> getUnReplaySuggestVo();
-
-
+    
+    
     /**
      * @param verifyPrize
      * @return R<MemberGiftRecord>
@@ -199,8 +200,8 @@
      */
     @PostMapping("/member/getVerifyPrize")
     public R<MemberGiftRecord> getVerifyPrize(@RequestBody String verifyPrize);
-
-
+    
+    
     /**
      * @param integralChangeDto
      * @return R
@@ -210,8 +211,8 @@
      */
     @PostMapping("/member/changeIntegral")
     public R signShare(@RequestBody IntegralChangeDto integralChangeDto);
-
-
+    
+    
     /**
      * @param shopIdList
      * @return R<Integer>
@@ -221,8 +222,8 @@
      */
     @PostMapping("/member/getAreaNewMember")
     public R<Integer> getAreaNewMember(@RequestBody List<Long> shopIdList);
-
-
+    
+    
     /**
      * @param mgtMemberShopNameDto
      * @return R
@@ -232,7 +233,7 @@
      */
     @PostMapping("/member/updateMemberShopName")
     public R updateMemberShopName(@RequestBody MgtMemberShopNameDto mgtMemberShopNameDto);
-
+    
     /**
      * @description
      * @author  jqs
@@ -242,7 +243,7 @@
      */
     @PostMapping("/member/getBirthdayCard")
     public R<BirthdayCard> getBirthdayCard();
-
+    
     /**
      * @description  核销奖品
      * @author  jqs
@@ -252,14 +253,24 @@
      */
     @PostMapping("/member/verifyPrize")
     public R verifyPrize(@RequestBody MerVerifyPrizeFinalDto merVerifyPrizeFinalDto);
-
+    
     /**
-     * @description
-     * @author  jqs
-     * @date    2023/8/23 19:06
      * @param ageType
-     * @return  R<List<Long>>
+     * @return R<List < Long>>
+     * @description
+     * @author jqs
+     * @date 2023/8/23 19:06
      */
     @PostMapping("/member/listUserIdByAgeType")
     public R<List<Long>> listUserIdByAgeType(@RequestBody Integer ageType);
+    
+    /**
+     * 手动添加用户积分
+     *
+     * @param integral
+     * @param userId
+     * @return
+     */
+    @PostMapping("/member/addIntegralRecord")
+    R addIntegralRecord(@RequestParam("integral") Integer integral, @RequestParam("userId") Long userId, @RequestParam("orderId") String orderId);
 }
\ No newline at end of file
diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedissonConfig.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedissonConfig.java
new file mode 100644
index 0000000..2310cac
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedissonConfig.java
@@ -0,0 +1,38 @@
+package com.ruoyi.common.redis.configure;
+
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.redisson.codec.JsonJacksonCodec;
+import org.redisson.config.Config;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * redis配置
+ * 
+ * @author jqs
+ */
+@Configuration
+public class RedissonConfig {
+    
+    @Value("${spring.redis.host}")
+    private String redisHost;
+    
+    @Value("${spring.redis.password}")
+    private String password;
+    
+    @Value("${spring.redis.port}")
+    private int port = 6379;
+    
+    @Bean
+    public RedissonClient getRedisson() {
+        Config config = new Config();
+        config.useSingleServer().
+                setAddress("redis://" + redisHost + ":" + port).
+                setPassword(password);
+        config.setCodec(new JsonJacksonCodec());
+        return Redisson.create(config);
+    }
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/LotteryEventController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerLotteryEventController.java
similarity index 92%
rename from ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/LotteryEventController.java
rename to ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerLotteryEventController.java
index 3c6db96..baa4810 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/LotteryEventController.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerLotteryEventController.java
@@ -14,8 +14,8 @@
  * @Date 2025/5/8 18:13
  */
 @RestController
-@RequestMapping("/lotteryEvent")
-public class LotteryEventController {
+@RequestMapping("/mer/lotteryEvent")
+public class MerLotteryEventController {
 	
 	@Resource
 	private ILotteryEventService lotteryEventService;
@@ -23,6 +23,7 @@
 	
 	/**
 	 * 根据开启方式获取活动列表
+	 *
 	 * @param activityType
 	 * @return
 	 */
@@ -33,4 +34,6 @@
 				.eq(LotteryEvent::getDelFlag, 0).last(" and now() between start_time and end_time"));
 		return R.ok(list);
 	}
+	
+	
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppLotteryEventController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppLotteryEventController.java
new file mode 100644
index 0000000..00834ab
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppLotteryEventController.java
@@ -0,0 +1,113 @@
+package com.ruoyi.goods.controller.miniapp;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.goods.api.domain.LotteryEvent;
+import com.ruoyi.goods.api.domain.UserLotteryEvent;
+import com.ruoyi.goods.api.domain.UserLotteryEventQuestions;
+import com.ruoyi.goods.domain.vo.AppLotteryEventPageVo;
+import com.ruoyi.goods.domain.vo.LotteryEventInfoVo;
+import com.ruoyi.goods.domain.vo.LotteryEventVo;
+import com.ruoyi.goods.service.lottery.ILotteryEventService;
+import com.ruoyi.goods.service.lottery.IUserLotteryEventQuestionsService;
+import com.ruoyi.goods.service.lottery.IUserLotteryEventService;
+import com.ruoyi.system.api.domain.dto.LotteryEventListDto;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 15:26
+ */
+@Validated
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "小程序抽奖相关接口")
+@RequestMapping("/app/lotteryEvent")
+public class AppLotteryEventController {
+	
+	@Resource
+	private ILotteryEventService lotteryEventService;
+	
+	@Resource
+	private IUserLotteryEventService userLotteryEventService;
+	
+	@Resource
+	private IUserLotteryEventQuestionsService userLotteryEventQuestionsService;
+	
+	
+	
+	
+	@ResponseBody
+	@PostMapping("/getLotteryEvent/{id}")
+	@ApiOperation(value = "获取抽奖页详情【2.0】", tags = "抽奖活动")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "id", value = "抽奖活动id", required = true, dataType = "String", paramType = "path")
+	})
+	public R<LotteryEventVo> getLotteryEvent(@PathVariable("id") String id) {
+		LotteryEventVo lotteryEvent = lotteryEventService.getLotteryEvent(id);
+		return R.ok(lotteryEvent);
+	}
+	
+	
+	@ResponseBody
+	@PostMapping("/lotteryDraw/{id}")
+	@ApiOperation(value = "抽奖操作【2.0】", tags = "抽奖活动", notes = "返回奖品ID")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "id", value = "抽奖活动id", required = true, dataType = "String", paramType = "path")
+	})
+	public R lotteryDraw(@PathVariable("id") String id) {
+		return lotteryEventService.lotteryDraw(id);
+	}
+	
+	
+	@ResponseBody
+	@PostMapping("/getLotteryEventList")
+	@ApiOperation(value = "获取普通抽奖列表【2.0】", tags = "抽奖活动")
+	public R<Page<AppLotteryEventPageVo>> getLotteryEventList(@RequestBody LotteryEventListDto dto){
+		Long userId = SecurityUtils.getUserId();
+		Page<AppLotteryEventPageVo> page = new Page<>();
+		page.setSize(dto.getPageSize());
+		page.setCurrent(dto.getPageNum());
+		List<AppLotteryEventPageVo> activityPageVoList = lotteryEventService.pageAppLotteryEvent(page,userId);
+		return R.ok(page.setRecords(activityPageVoList));
+	}
+	
+	
+	@ResponseBody
+	@PostMapping("/getLotteryEventInfo/{id}")
+	@ApiOperation(value = "获取抽奖活动详情【2.0】", tags = "抽奖活动")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "id", value = "抽奖活动id", required = true, dataType = "String", paramType = "path")
+	})
+	public R<LotteryEventInfoVo> getLotteryEventInfo(@PathVariable("id") String id){
+		Long userId = SecurityUtils.getUserId();
+		LotteryEvent lotteryEvent = lotteryEventService.getById(id);
+		LotteryEventInfoVo vo = new LotteryEventInfoVo();
+		vo.setId(lotteryEvent.getId());
+		vo.setName(lotteryEvent.getName());
+		vo.setActivityProfile(lotteryEvent.getActivityProfile());
+		vo.setStartTime(lotteryEvent.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+		vo.setActivityContent(lotteryEvent.getActivityContent());
+		int count = userLotteryEventService.count(new QueryWrapper<UserLotteryEvent>().eq("lottery_event_id", id).eq("user_id", userId));
+		vo.setParticipation(count > 0);
+		//答题抽奖需要判断是否答题完成
+		if(5 == lotteryEvent.getActivityType()){
+			UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", id).eq("user_id", userId));
+			vo.setContinueAnswer(null != questionsServiceOne ? questionsServiceOne.getStatus() : 0);
+		}
+		return R.ok(vo);
+	}
+	
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppLotteryEventPageVo.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppLotteryEventPageVo.java
new file mode 100644
index 0000000..769a2de
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/AppLotteryEventPageVo.java
@@ -0,0 +1,30 @@
+package com.ruoyi.goods.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 16:25
+ */
+@Data
+@ApiModel
+public class AppLotteryEventPageVo {
+	@ApiModelProperty("数据id")
+	private String id;
+	@ApiModelProperty("抽奖名称")
+	private String name;
+	@ApiModelProperty("活动简介名称")
+	private String activityProfile;
+	@ApiModelProperty("开启方式(1=新注册用户,2=下单,3=分享小程序,4=普通抽奖,5=答题抽奖)")
+	private Integer activityType;
+	@ApiModelProperty("活动开始时间")
+	private String startTime;
+	@ApiModelProperty("活动结束时间")
+	private String endTime;
+	@ApiModelProperty("封面图")
+	private String coverImage;
+	@ApiModelProperty("参与状态")
+	private Boolean participation;
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/LotteryEventInfoVo.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/LotteryEventInfoVo.java
new file mode 100644
index 0000000..aad7b79
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/LotteryEventInfoVo.java
@@ -0,0 +1,28 @@
+package com.ruoyi.goods.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 17:42
+ */
+@Data
+@ApiModel
+public class LotteryEventInfoVo {
+	@ApiModelProperty(value = "抽奖id")
+	private String id;
+	@ApiModelProperty(value = "抽奖名称")
+	private String name;
+	@ApiModelProperty(value = "活动简介名称")
+	private String activityProfile;
+	@ApiModelProperty(value = "开始时间")
+	private String startTime;
+	@ApiModelProperty(value = "活动详情")
+	private String activityContent;
+	@ApiModelProperty(value = "是否参与")
+	private Boolean participation;
+	@ApiModelProperty(value = "是否继续答题(0=未开始,1=已开始,2=已结束)")
+	private Integer continueAnswer;
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/LotteryEventVo.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/LotteryEventVo.java
new file mode 100644
index 0000000..ba7f3e8
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/LotteryEventVo.java
@@ -0,0 +1,29 @@
+package com.ruoyi.goods.domain.vo;
+
+import com.ruoyi.goods.api.domain.LotteryEventPrize;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/12 9:39
+ */
+@Data
+@ApiModel
+public class LotteryEventVo {
+	@ApiModelProperty(value = "抽奖id")
+	private String id;
+	@ApiModelProperty(value = "抽奖名称")
+	private String name;
+	@ApiModelProperty(value = "活动简介名称")
+	private String activityProfile;
+	@ApiModelProperty(value = "奖品列表")
+	private List<LotteryEventPrize> prizeList;
+	@ApiModelProperty(value = "剩余次数")
+	private Integer laveTimes;
+	@ApiModelProperty(value = "您的奖品")
+	private List<UserLotteryEventVo> yourPrizeList;
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/UserLotteryEventVo.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/UserLotteryEventVo.java
new file mode 100644
index 0000000..775a125
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/UserLotteryEventVo.java
@@ -0,0 +1,22 @@
+package com.ruoyi.goods.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/12 10:44
+ */
+@Data
+@ApiModel
+public class UserLotteryEventVo {
+	@ApiModelProperty("奖品名称")
+	private String name;
+	@ApiModelProperty("奖品类型(1=优惠券,2=平台商品,3=线下商品,4=积分)")
+	private Integer prizeType;
+	@ApiModelProperty("奖品数量")
+	private Integer number;
+	@ApiModelProperty("核销码")
+	private String verifyCode;
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventMapper.java
index 4e1ee4f..2733f17 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventMapper.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventMapper.java
@@ -1,11 +1,26 @@
 package com.ruoyi.goods.mapper.lottery;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.goods.api.domain.LotteryEvent;
+import com.ruoyi.goods.domain.vo.AppLotteryEventPageVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @author zhibing.pu
  * @Date 2025/5/8 18:00
  */
 public interface LotteryEventMapper extends BaseMapper<LotteryEvent> {
+	
+	
+	/**
+	 * 查询APP端普通抽奖列表数据
+	 *
+	 * @param page
+	 * @param userId
+	 * @return
+	 */
+	List<AppLotteryEventPageVo> pageAppLotteryEvent(Page<AppLotteryEventPageVo> page, @Param("userId") Long userId);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventPrizeMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventPrizeMapper.java
new file mode 100644
index 0000000..7e262ef
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventPrizeMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.goods.mapper.lottery;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.goods.api.domain.LotteryEventPrize;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/12 9:55
+ */
+public interface LotteryEventPrizeMapper extends BaseMapper<LotteryEventPrize> {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventQuestionsAnswersMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventQuestionsAnswersMapper.java
new file mode 100644
index 0000000..1db0275
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventQuestionsAnswersMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.goods.mapper.lottery;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.goods.api.domain.LotteryEventQuestionsAnswers;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/19 16:18
+ */
+public interface LotteryEventQuestionsAnswersMapper extends BaseMapper<LotteryEventQuestionsAnswers> {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventQuestionsMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventQuestionsMapper.java
new file mode 100644
index 0000000..a019fca
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/LotteryEventQuestionsMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.goods.mapper.lottery;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.goods.api.domain.LotteryEventQuestions;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 18:03
+ */
+public interface LotteryEventQuestionsMapper extends BaseMapper<LotteryEventQuestions> {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventMapper.java
new file mode 100644
index 0000000..6b75b63
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.goods.mapper.lottery;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.goods.api.domain.UserLotteryEvent;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/12 10:40
+ */
+public interface UserLotteryEventMapper extends BaseMapper<UserLotteryEvent> {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventQuestionsAnswersMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventQuestionsAnswersMapper.java
new file mode 100644
index 0000000..b7c238e
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventQuestionsAnswersMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.goods.mapper.lottery;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.goods.api.domain.UserLotteryEventQuestionsAnswers;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/19 16:06
+ */
+public interface UserLotteryEventQuestionsAnswersMapper extends BaseMapper<UserLotteryEventQuestionsAnswers> {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventQuestionsMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventQuestionsMapper.java
new file mode 100644
index 0000000..464136e
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/lottery/UserLotteryEventQuestionsMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.goods.mapper.lottery;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.goods.api.domain.UserLotteryEventQuestions;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 18:19
+ */
+public interface UserLotteryEventQuestionsMapper extends BaseMapper<UserLotteryEventQuestions> {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventPrizeServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventPrizeServiceImpl.java
new file mode 100644
index 0000000..b2e7bce
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventPrizeServiceImpl.java
@@ -0,0 +1,15 @@
+package com.ruoyi.goods.service.impl.lottery;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.goods.api.domain.LotteryEventPrize;
+import com.ruoyi.goods.mapper.lottery.LotteryEventPrizeMapper;
+import com.ruoyi.goods.service.lottery.ILotteryEventPrizeService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/12 9:56
+ */
+@Service
+public class LotteryEventPrizeServiceImpl extends ServiceImpl<LotteryEventPrizeMapper, LotteryEventPrize> implements ILotteryEventPrizeService {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventQuestionsAnswersServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventQuestionsAnswersServiceImpl.java
new file mode 100644
index 0000000..bf91aa7
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventQuestionsAnswersServiceImpl.java
@@ -0,0 +1,15 @@
+package com.ruoyi.goods.service.impl.lottery;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.goods.api.domain.LotteryEventQuestionsAnswers;
+import com.ruoyi.goods.mapper.lottery.LotteryEventQuestionsAnswersMapper;
+import com.ruoyi.goods.service.lottery.ILotteryEventQuestionsAnswersService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/19 16:19
+ */
+@Service
+public class LotteryEventQuestionsAnswersServiceImpl extends ServiceImpl<LotteryEventQuestionsAnswersMapper, LotteryEventQuestionsAnswers> implements ILotteryEventQuestionsAnswersService {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventQuestionsServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventQuestionsServiceImpl.java
new file mode 100644
index 0000000..5966c71
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventQuestionsServiceImpl.java
@@ -0,0 +1,15 @@
+package com.ruoyi.goods.service.impl.lottery;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.goods.api.domain.LotteryEventQuestions;
+import com.ruoyi.goods.mapper.lottery.LotteryEventQuestionsMapper;
+import com.ruoyi.goods.service.lottery.ILotteryEventQuestionsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 18:04
+ */
+@Service
+public class LotteryEventQuestionsServiceImpl extends ServiceImpl<LotteryEventQuestionsMapper, LotteryEventQuestions> implements ILotteryEventQuestionsService {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java
index be33f63..5c1bc6a 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java
@@ -1,10 +1,35 @@
 package com.ruoyi.goods.service.impl.lottery;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.uuid.IdUtils;
+import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.goods.api.domain.LotteryEvent;
+import com.ruoyi.goods.api.domain.LotteryEventPrize;
+import com.ruoyi.goods.api.domain.UserLotteryEvent;
+import com.ruoyi.goods.domain.vo.AppLotteryEventPageVo;
+import com.ruoyi.goods.domain.vo.LotteryEventVo;
+import com.ruoyi.goods.domain.vo.UserLotteryEventVo;
 import com.ruoyi.goods.mapper.lottery.LotteryEventMapper;
+import com.ruoyi.goods.service.lottery.ILotteryEventPrizeService;
 import com.ruoyi.goods.service.lottery.ILotteryEventService;
+import com.ruoyi.goods.service.lottery.IUserLotteryEventQuestionsAnswersService;
+import com.ruoyi.goods.service.lottery.IUserLotteryEventService;
+import com.ruoyi.system.api.service.RemoteCouponService;
+import com.ruoyi.system.api.service.RemoteMemberService;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * @author zhibing.pu
@@ -12,4 +37,149 @@
  */
 @Service
 public class LotteryEventServiceImpl extends ServiceImpl<LotteryEventMapper, LotteryEvent> implements ILotteryEventService {
+	
+	@Resource
+	private IUserLotteryEventService userLotteryEventService;
+	
+	@Resource
+	private ILotteryEventPrizeService lotteryEventPrizeService;
+	
+	@Resource
+	private RemoteCouponService remoteCouponService;
+	
+	@Resource
+	private RemoteMemberService remoteMemberService;
+	
+	@Resource
+	private RedissonClient redissonClient;
+	
+	@Resource
+	private IUserLotteryEventQuestionsAnswersService userLotteryEventQuestionsService;
+	
+	
+	/**
+	 * 根据id查询抽奖活动信息
+	 *
+	 * @param id
+	 * @return
+	 */
+	@Override
+	public LotteryEventVo getLotteryEvent(String id) {
+		LotteryEvent lotteryEvent = this.getById(id);
+		//构建返回结果
+		LotteryEventVo vo = new LotteryEventVo();
+		vo.setId(lotteryEvent.getId());
+		vo.setName(lotteryEvent.getName());
+		vo.setActivityProfile(lotteryEvent.getActivityProfile());
+		List<UserLotteryEvent> userLotteryEvents = userLotteryEventService.list(new QueryWrapper<UserLotteryEvent>().eq("lottery_event_id", id));
+		vo.setLaveTimes(lotteryEvent.getTimes() - userLotteryEvents.size());
+		//查询抽检活动奖品
+		List<LotteryEventPrize> lotteryEventPrizeList = lotteryEventPrizeService.list(new QueryWrapper<LotteryEventPrize>().eq("lottery_event_id", id));
+		vo.setPrizeList(lotteryEventPrizeList);
+		
+		//构建我的奖品明细
+		List<UserLotteryEventVo> collect = userLotteryEvents.stream().map(s -> {
+			UserLotteryEventVo userLotteryEventVo = new UserLotteryEventVo();
+			userLotteryEventVo.setName(s.getObjectName());
+			userLotteryEventVo.setPrizeType(s.getPrizeType());
+			userLotteryEventVo.setNumber(s.getNumber());
+			userLotteryEventVo.setVerifyCode(s.getVerifyCode());
+			return userLotteryEventVo;
+		}).collect(Collectors.toList());
+		vo.setYourPrizeList(collect);
+		return vo;
+	}
+	
+	
+	/**
+	 * 抽奖操作
+	 *
+	 * @param id
+	 * @return
+	 */
+	@Override
+	public R lotteryDraw(String id) {
+		Long userId = SecurityUtils.getUserId();
+		LotteryEvent lotteryEvent = this.getById(id);
+		//判断答题抽奖是否满足抽奖条件
+		if (lotteryEvent.getActivityType() == 5) {
+			BigDecimal correctAnswerRate = userLotteryEventQuestionsService.getCorrectAnswerRate(userId, id);
+			if (correctAnswerRate.compareTo(lotteryEvent.getAccuracy()) < 0) {
+				return R.fail("答题抽奖失败,答题正确率低于活动要求");
+			}
+		}
+		
+		//使用redis锁处理高并发
+		RLock lock = redissonClient.getLock("lottery_event::" + userId + "::" + id);
+		try {
+			boolean tryLock = lock.tryLock(30, TimeUnit.SECONDS);
+			if (tryLock) {
+				//判断抽奖次数是否用完
+				int count = userLotteryEventService.count(new QueryWrapper<UserLotteryEvent>().eq("lottery_event_id", id).eq("user_id", userId));
+				if (lotteryEvent.getTimes() <= count) {
+					return R.fail("抽奖次数已用完");
+				}
+				List<LotteryEventPrize> lotteryEventPrizeList = lotteryEventPrizeService.list(new QueryWrapper<LotteryEventPrize>().eq("lottery_event_id", id));
+				//开始抽奖,根据中奖概率来抽奖
+				List<LotteryEventPrize> list = new ArrayList<>();
+				for (LotteryEventPrize lotteryEventPrize : lotteryEventPrizeList) {
+					int winRate = lotteryEventPrize.getWinRate().intValue();
+					for (int i = 0; i < winRate; i++) {
+						LotteryEventPrize event = new LotteryEventPrize();
+						BeanUtil.copyProperties(lotteryEventPrize, event);
+						list.add(event);
+					}
+				}
+				//将待抽奖的集合进行随机排序
+				Collections.shuffle(list);
+				//开始获取随机数
+				int random = new Random().nextInt(list.size());
+				LotteryEventPrize lotteryEventPrize = lotteryEventPrizeList.get(random);
+				//添加中奖商品
+				UserLotteryEvent userLotteryEvent = new UserLotteryEvent();
+				userLotteryEvent.setId(IdUtils.simpleUUID());
+				userLotteryEvent.setUserId(userId);
+				userLotteryEvent.setLotteryEventId(id);
+				userLotteryEvent.setLotteryEventPrizeId(lotteryEventPrize.getId());
+				userLotteryEvent.setPrizeType(lotteryEventPrize.getPrizeType());
+				userLotteryEvent.setObjectId(lotteryEventPrize.getObjectId());
+				userLotteryEvent.setObjectName(lotteryEventPrize.getObjectName());
+				userLotteryEvent.setNumber(lotteryEventPrize.getNumber());
+				//商品需要生成核销码和核销状态
+				if (Arrays.asList(2, 3).contains(lotteryEventPrize.getPrizeType())) {
+					userLotteryEvent.setVerifyCode(IdUtils.simpleUUID());
+					userLotteryEvent.setIsVerify(0);
+				}
+				//中奖优惠券
+				if (1 == lotteryEventPrize.getPrizeType()) {
+					remoteCouponService.addMemberCoupon(lotteryEventPrize.getObjectId(), lotteryEventPrize.getNumber(), userId);
+				}
+				//中奖积分
+				if (4 == lotteryEventPrize.getPrizeType()) {
+					remoteMemberService.addIntegralRecord(lotteryEventPrize.getNumber(), userId, id);
+				}
+				userLotteryEvent.setCreateTime(LocalDateTime.now());
+				userLotteryEventService.save(userLotteryEvent);
+				return R.ok();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			lock.unlock();
+		}
+		return R.fail("抽奖失败");
+	}
+	
+	
+	/**
+	 * 获取APP抽奖列表
+	 *
+	 * @param page
+	 * @param userId
+	 * @return
+	 */
+	@Override
+	public List<AppLotteryEventPageVo> pageAppLotteryEvent(Page<AppLotteryEventPageVo> page, Long userId) {
+		return this.baseMapper.pageAppLotteryEvent(page, userId);
+	}
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsAnswersServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsAnswersServiceImpl.java
new file mode 100644
index 0000000..3e7ac76
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsAnswersServiceImpl.java
@@ -0,0 +1,48 @@
+package com.ruoyi.goods.service.impl.lottery;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.goods.api.domain.LotteryEventQuestionsAnswers;
+import com.ruoyi.goods.api.domain.UserLotteryEventQuestionsAnswers;
+import com.ruoyi.goods.mapper.lottery.UserLotteryEventQuestionsAnswersMapper;
+import com.ruoyi.goods.service.lottery.ILotteryEventQuestionsAnswersService;
+import com.ruoyi.goods.service.lottery.IUserLotteryEventQuestionsAnswersService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+
+
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/19 16:08
+ */
+@Service
+public class UserLotteryEventQuestionsAnswersServiceImpl extends ServiceImpl<UserLotteryEventQuestionsAnswersMapper, UserLotteryEventQuestionsAnswers> implements IUserLotteryEventQuestionsAnswersService {
+	
+	@Resource
+	private ILotteryEventQuestionsAnswersService lotteryEventQuestionsAnswersService;
+	
+	
+	
+	
+	
+	/**
+	 * 获取答题正确率
+	 * @param userId
+	 * @param lotteryEventId
+	 * @return
+	 */
+	@Override
+	public BigDecimal getCorrectAnswerRate(Long userId, String lotteryEventId) {
+		int count = this.count(new QueryWrapper<UserLotteryEventQuestionsAnswers>().eq("user_id", userId).eq("lottery_event_id", lotteryEventId).eq("is_correct", 1));
+		if (count > 0) {
+			int count1 = lotteryEventQuestionsAnswersService.count(new QueryWrapper<LotteryEventQuestionsAnswers>().eq("lottery_event_id", lotteryEventId));
+			return new BigDecimal(count).divide(new BigDecimal(count1), 2, BigDecimal.ROUND_HALF_UP);
+		}
+		return BigDecimal.ZERO;
+	}
+
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsServiceImpl.java
new file mode 100644
index 0000000..a75c530
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsServiceImpl.java
@@ -0,0 +1,15 @@
+package com.ruoyi.goods.service.impl.lottery;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.goods.api.domain.UserLotteryEventQuestions;
+import com.ruoyi.goods.mapper.lottery.UserLotteryEventQuestionsMapper;
+import com.ruoyi.goods.service.lottery.IUserLotteryEventQuestionsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 18:19
+ */
+@Service
+public class UserLotteryEventQuestionsServiceImpl extends ServiceImpl<UserLotteryEventQuestionsMapper, UserLotteryEventQuestions> implements IUserLotteryEventQuestionsService {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventServiceImpl.java
new file mode 100644
index 0000000..3e7c5aa
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventServiceImpl.java
@@ -0,0 +1,15 @@
+package com.ruoyi.goods.service.impl.lottery;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.goods.api.domain.UserLotteryEvent;
+import com.ruoyi.goods.mapper.lottery.UserLotteryEventMapper;
+import com.ruoyi.goods.service.lottery.IUserLotteryEventService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/12 10:41
+ */
+@Service
+public class UserLotteryEventServiceImpl extends ServiceImpl<UserLotteryEventMapper, UserLotteryEvent> implements IUserLotteryEventService {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventPrizeService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventPrizeService.java
new file mode 100644
index 0000000..e54d3e5
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventPrizeService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.goods.service.lottery;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.goods.api.domain.LotteryEventPrize;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/12 9:56
+ */
+public interface ILotteryEventPrizeService extends IService<LotteryEventPrize> {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventQuestionsAnswersService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventQuestionsAnswersService.java
new file mode 100644
index 0000000..c7454de
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventQuestionsAnswersService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.goods.service.lottery;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.goods.api.domain.LotteryEventQuestionsAnswers;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/19 16:18
+ */
+public interface ILotteryEventQuestionsAnswersService extends IService<LotteryEventQuestionsAnswers> {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventQuestionsService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventQuestionsService.java
new file mode 100644
index 0000000..3a80390
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventQuestionsService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.goods.service.lottery;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.goods.api.domain.LotteryEventQuestions;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 18:03
+ */
+public interface ILotteryEventQuestionsService extends IService<LotteryEventQuestions> {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventService.java
index 39fb365..6ba7f01 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/ILotteryEventService.java
@@ -1,11 +1,45 @@
 package com.ruoyi.goods.service.lottery;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.goods.api.domain.LotteryEvent;
+import com.ruoyi.goods.domain.vo.AppLotteryEventPageVo;
+import com.ruoyi.goods.domain.vo.LotteryEventVo;
+
+import java.util.List;
 
 /**
  * @author zhibing.pu
  * @Date 2025/5/8 18:05
  */
 public interface ILotteryEventService extends IService<LotteryEvent> {
+	
+	
+	/**
+	 * 获取抽奖活动详情
+	 *
+	 * @param id
+	 * @return
+	 */
+	LotteryEventVo getLotteryEvent(String id);
+	
+	
+	/**
+	 * 抽奖操作
+	 *
+	 * @param id
+	 * @return
+	 */
+	R lotteryDraw(String id);
+	
+	
+	/**
+	 * 获取APP抽奖列表
+	 *
+	 * @param page
+	 * @param userId
+	 * @return
+	 */
+	List<AppLotteryEventPageVo> pageAppLotteryEvent(Page<AppLotteryEventPageVo> page, Long userId);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventQuestionsAnswersService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventQuestionsAnswersService.java
new file mode 100644
index 0000000..afb3e15
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventQuestionsAnswersService.java
@@ -0,0 +1,22 @@
+package com.ruoyi.goods.service.lottery;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.goods.api.domain.UserLotteryEventQuestionsAnswers;
+
+import java.math.BigDecimal;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/19 16:07
+ */
+public interface IUserLotteryEventQuestionsAnswersService extends IService<UserLotteryEventQuestionsAnswers> {
+	
+	
+	/**
+	 * 获取用户答题正确率
+	 * @param userId
+	 * @param lotteryEventId
+	 * @return
+	 */
+	BigDecimal getCorrectAnswerRate(Long userId, String lotteryEventId);
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventQuestionsService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventQuestionsService.java
new file mode 100644
index 0000000..947bb77
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventQuestionsService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.goods.service.lottery;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.goods.api.domain.UserLotteryEventQuestions;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 18:19
+ */
+public interface IUserLotteryEventQuestionsService extends IService<UserLotteryEventQuestions> {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventService.java
new file mode 100644
index 0000000..d4268d1
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/lottery/IUserLotteryEventService.java
@@ -0,0 +1,12 @@
+package com.ruoyi.goods.service.lottery;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.goods.api.domain.UserLotteryEvent;
+
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/12 10:40
+ */
+public interface IUserLotteryEventService extends IService<UserLotteryEvent> {
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventMapper.xml
index 57e5f0c..08dc23c 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventMapper.xml
+++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventMapper.xml
@@ -1,5 +1,30 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.goods.mapper.lottery.LotteryEventMapper">
-
+	
+	
+	<select id="pageAppLotteryEvent" resultType="com.ruoyi.goods.domain.vo.AppLotteryEventPageVo">
+		select *
+		from (select a.id,
+		             a.name,
+		             a.activity_profile                             as activityProfile,
+		             a.activity_type                                as activityType,
+		             date_format(a.start_time, '%Y-%m-%d %H:%i:%s') as startTime,
+		             date_format(a.end_time, '%Y-%m-%d %H:%i:%s')   as endTime,
+		             a.cover_image                                  as coverImage,
+		             if(ifnull(b.num, 0) = 0, false, true)          as participation,
+		             CASE
+			             WHEN NOW() > a.start_time and now() &lt;= a.end_time and ifnull(b.num, 0) > 0 THEN 1
+			             WHEN NOW() > a.start_time and now() &lt;= a.end_time and ifnull(b.num, 0) = 0 THEN 2
+			             ELSE 3 END                                 as sort
+		      from t_lottery_event a
+			           left join (select count(1) as num, lottery_event_id
+			                      from t_user_lottery_event
+			                      where user_id = #{userId}
+			                      group by lottery_event_id) b on a.id = b.lottery_event_id
+		      where a.del_flag = 0
+			    and now() > a.end_time
+			    and a.activity_type in (4, 5)) as aa
+		order by aa.sort, aa.startTime
+	</select>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventPrizeMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventPrizeMapper.xml
new file mode 100644
index 0000000..9c6b67f
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventPrizeMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.goods.mapper.lottery.LotteryEventPrizeMapper">
+
+</mapper>
diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/UserLotteryEventMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/UserLotteryEventMapper.xml
new file mode 100644
index 0000000..ef8817f
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/UserLotteryEventMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.goods.mapper.lottery.UserLotteryEventMapper">
+
+</mapper>
diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/UserLotteryEventQuestionsMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/UserLotteryEventQuestionsMapper.xml
new file mode 100644
index 0000000..5a153d5
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/UserLotteryEventQuestionsMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.goods.mapper.lottery.UserLotteryEventQuestionsMapper">
+
+</mapper>
diff --git a/ruoyi-modules/ruoyi-member/pom.xml b/ruoyi-modules/ruoyi-member/pom.xml
index 034888c..e40bb96 100644
--- a/ruoyi-modules/ruoyi-member/pom.xml
+++ b/ruoyi-modules/ruoyi-member/pom.xml
@@ -143,6 +143,12 @@
             <artifactId>mapstruct-processor</artifactId>
             <version>1.3.0.Final</version>
         </dependency>
+	    <dependency>
+		    <groupId>com.ruoyi</groupId>
+		    <artifactId>ruoyi-api-goods</artifactId>
+		    <version>3.6.2</version>
+		    <scope>compile</scope>
+	    </dependency>
     </dependencies>
 
     <build>
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java
index 75010a6..d707258 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java
@@ -11,10 +11,7 @@
 import com.ruoyi.system.api.domain.vo.AppMemberCouponVo;
 import com.ruoyi.system.api.domain.vo.MerVerifyCouponGetVo;
 import lombok.extern.slf4j.Slf4j;
-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;
 import java.util.List;
@@ -131,17 +128,30 @@
         memberCouponService.sureMemberCoupon(merVerifyMemberCouponDto.getCouponId(),merVerifyMemberCouponDto.getShopId());
         return R.ok();
     }
-
+    
     /**
-     * @description  回退优惠券
-     * @author  jqs
-     * @date    2023/7/13 19:38
      * @param memberCouponIds
-     * @return  R
+     * @return R
+     * @description 回退优惠券
+     * @author jqs
+     * @date 2023/7/13 19:38
      */
     @PostMapping("/backMemberCoupon")
-    public R backMemberCoupon(@RequestBody String memberCouponIds){
+    public R backMemberCoupon(@RequestBody String memberCouponIds) {
         memberCouponService.backMemberCoupon(memberCouponIds);
         return R.ok();
     }
+    
+    
+    /**
+     * 手动添加用户优惠券
+     *
+     * @param couponId
+     * @param number
+     * @return
+     */
+    @PostMapping("/addMemberCoupon")
+    public R addMemberCoupon(@RequestParam("couponId") String couponId, @RequestParam("number") Integer number, @RequestParam("userId") Long userId) {
+        return memberCouponService.addMemberCoupon(couponId, number, userId);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
index 7bea543..8dd6dda 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
@@ -16,10 +16,7 @@
 import com.ruoyi.system.api.model.AppMiniLoginVo;
 import com.ruoyi.system.api.service.RemoteShopService;
 import io.swagger.annotations.ApiOperation;
-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;
 import java.util.List;
@@ -364,17 +361,29 @@
         memberService.updateMemberShopName(mgtMemberShopNameDto);
         return R.ok();
     }
-
+    
     @PostMapping("/getBirthdayCard")
-    public R<BirthdayCard> getBirthdayCard()
-    {
+    public R<BirthdayCard> getBirthdayCard() {
         BirthdayCard birthdayCard = birthdayCardService.getBirthdayCard();
         return R.ok(birthdayCard);
     }
-
+    
     @PostMapping("/listUserIdByAgeType")
-    public R<List<Long>> listUserIdByAgeType(@RequestBody Integer ageType){
+    public R<List<Long>> listUserIdByAgeType(@RequestBody Integer ageType) {
         List<Long> userIdList = memberService.listUserIdByAgeType(ageType);
         return R.ok(userIdList);
     }
+    
+    
+    /**
+     * 手动添加用户积分
+     *
+     * @param integral
+     * @param userId
+     * @return
+     */
+    @PostMapping("/addIntegralRecord")
+    public R addIntegralRecord(@RequestParam("integral") Integer integral, @RequestParam("userId") Long userId, @RequestParam("orderId") String orderId) {
+        return memberService.addIntegralRecord(integral, userId, orderId);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppIntegralController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppIntegralController.java
index 998990b..0fe3f3e 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppIntegralController.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppIntegralController.java
@@ -4,6 +4,8 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.goods.api.domain.LotteryEvent;
+import com.ruoyi.goods.api.service.LotteryEventClient;
 import com.ruoyi.member.domain.vo.AppIntegralRecordPageVo;
 import com.ruoyi.member.domain.vo.AppIntegralTaskListVo;
 import com.ruoyi.member.service.member.IntegralRecordService;
@@ -32,14 +34,17 @@
 @RestController
 @RequestMapping("/app/integral")
 public class AppIntegralController {
-
+    
     @Resource
     private MemberService memberService;
-
+    
     @Resource
     private IntegralRecordService integralRecordService;
-
-
+    
+    @Resource
+    private LotteryEventClient lotteryEventClient;
+    
+    
     @RequestMapping(value = "/pageAppMemberIntegralRecord", method = RequestMethod.POST)
     @ApiOperation(value = "分页获取用户积分明细列表")
     public R<Page<AppIntegralRecordPageVo>> pageAppMemberIntegralRecord(@RequestBody AppPageDto appPageDto) {
@@ -48,7 +53,7 @@
         Page<AppIntegralRecordPageVo> page = new Page<>();
         page.setSize(appPageDto.getPageSize());
         page.setCurrent(appPageDto.getPageNum());
-        List<AppIntegralRecordPageVo> integralRecordPageVoList = integralRecordService.pageAppMemberIntegralRecord(page,userId);
+        List<AppIntegralRecordPageVo> integralRecordPageVoList = integralRecordService.pageAppMemberIntegralRecord(page, userId);
         return R.ok(page.setRecords(integralRecordPageVoList));
     }
 
@@ -73,18 +78,20 @@
         }
         return R.ok();
     }
-
+    
     @RequestMapping(value = "/signShare", method = RequestMethod.POST)
-    @ApiOperation(value = "今日分享")
-    public R signShare() {
+    @ApiOperation(value = "今日分享【2.0】")
+    public R<Boolean> signShare() {
         Long userId = SecurityUtils.getUserId();
         IntegralChangeDto integralChangeDto = new IntegralChangeDto();
         integralChangeDto.setIntegralType(1);
         integralChangeDto.setUserId(userId);
         Boolean complete = memberService.changeIntegral(integralChangeDto);
-        if(complete){
+        if (complete) {
             throw new ServiceException(AppErrorConstant.DOUBLE_INTEGRAL_TASK);
         }
-        return R.ok();
+        //判断是否可以抽奖
+        List<LotteryEvent> data = lotteryEventClient.getLotteryEventList(3).getData();
+        return R.ok(data.size() > 0);
     }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/IntegralRecord.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/IntegralRecord.java
index 32d22af..e95967f 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/IntegralRecord.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/IntegralRecord.java
@@ -42,7 +42,7 @@
     @TableField(value = "user_id")
     private Long userId;
     /**
-     * 变动类型1分享获取2平台建议获取3门店建议获取4每日签到5消费得积分
+     * 变动类型1分享获取2平台建议获取3门店建议获取4每日签到5消费得积分6抽奖获得
      */
     @TableField("change_type")
     private Integer changeType;
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
index aa12d41..14e1a02 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
@@ -4,13 +4,19 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.member.domain.dto.AppMemberCouponPageDto;
 import com.ruoyi.member.domain.dto.MemberSelectCouponDto;
 import com.ruoyi.member.domain.dto.MerGoodsCouponListDto;
+import com.ruoyi.member.domain.pojo.coupon.Coupon;
 import com.ruoyi.member.domain.vo.AppMemberCouponPageVo;
+import com.ruoyi.member.mapper.coupon.CouponMapper;
 import com.ruoyi.member.mapper.member.MemberCouponMapper;
+import com.ruoyi.member.service.coupon.CouponService;
+import com.ruoyi.member.service.coupon.MemberCouponRecordService;
 import com.ruoyi.member.service.member.MemberCouponService;
 import com.ruoyi.system.api.constant.AppErrorConstant;
 import com.ruoyi.system.api.domain.dto.MerBaseDto;
@@ -45,17 +51,26 @@
 @Service
 @DS("sharding")
 public class MemberCouponServiceImpl extends ServiceImpl<MemberCouponMapper, MemberCoupon> implements MemberCouponService {
-
+    
     @Resource
     private MemberCouponMapper memberCouponMapper;
-
+    
     @Resource
     private RemoteGoodsService remoteGoodsService;
-
+    
     @Resource
     private RemoteShopService remoteShopService;
-
-
+    
+    @Resource
+    private CouponService couponService;
+    
+    @Resource
+    private MemberCouponRecordService memberCouponRecordService;
+    
+    @Resource
+    private CouponMapper couponMapper;
+    
+    
     /**
      * @description: TODO
      * @author jqs34
@@ -63,11 +78,11 @@
      * @version 1.0
      */
     @Override
-    public List<AppMemberCouponVo> listVoMemberCouponByUserId(MerBaseDto merBaseDto){
+    public List<AppMemberCouponVo> listVoMemberCouponByUserId(MerBaseDto merBaseDto) {
         List<AppMemberCouponVo> appMemberCouponVoList = memberCouponMapper.listVoMemberCouponByUserId(merBaseDto);
         return appMemberCouponVoList;
     }
-
+    
     /**
      * @description  核销优惠券
      * @author  jqs
@@ -112,7 +127,7 @@
         merVerifyCouponGetVo.setMemberCoupon(memberCoupon);
         return merVerifyCouponGetVo;
     }
-
+    
     /**
      * @description  核销优惠券
      * @author  jqs
@@ -150,13 +165,13 @@
             merVerifyCouponGetVo.setCouponFrom("平台");
         }
         memberCoupon.setCouponStatus(2);
-
+    
         memberCoupon.setUseTime(new Date());
         this.saveOrUpdate(memberCoupon);
         merVerifyCouponGetVo.setMemberCoupon(memberCoupon);
         return merVerifyCouponGetVo;
     }
-
+    
     /**
      * @description
      * @author  jqs
@@ -173,7 +188,7 @@
         Integer total = this.count(queryWrapper);
         return total;
     }
-
+    
     /**
      * @description 用户分页获取已领取优惠券列表
      * @author  jqs
@@ -261,7 +276,7 @@
         }
         return memberCouponPageVoList;
     }
-
+    
     /**
      * @description  定时检查优惠券过期
      * @author  jqs
@@ -273,7 +288,7 @@
     public void timingCheckMemberCoupon(){
         memberCouponMapper.timingCheckMemberCoupon();
     }
-
+    
     /**
      * @description  使用优惠券
      * @author  jqs
@@ -286,7 +301,7 @@
     public void useMemberCoupon(String memberCouponIds){
         memberCouponMapper.useMemberCoupon(memberCouponIds);
     }
-
+    
     /**
      * @description  使用优惠券
      * @author  jqs
@@ -298,7 +313,7 @@
     public void backMemberCoupon(String memberCouponIds){
         memberCouponMapper.backMemberCoupon(memberCouponIds);
     }
-
+    
     /**
      * @description
      * @author  jqs
@@ -347,24 +362,101 @@
         }
         return merMemberCouponVoList;
     }
-
-
+    
+    
     /**
-     * @description  确认核销优惠券
-     * @author  jqs
-     * @date    2023/8/15 11:21
      * @param memberCouponId
      * @param shopId
-     * @return  void
+     * @return void
+     * @description 确认核销优惠券
+     * @author jqs
+     * @date 2023/8/15 11:21
      */
     @Override
-    public void sureMemberCoupon(Long memberCouponId, Long shopId){
+    public void sureMemberCoupon(Long memberCouponId, Long shopId) {
         memberCouponMapper.sureMemberCoupon(memberCouponId, shopId);
     }
-
+    
     @Override
     @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
     public void insert(MemberCoupon memberCoupon) {
         this.baseMapper.insert(memberCoupon);
     }
+    
+    
+    /**
+     * 手动添加用户优惠券
+     *
+     * @param couponId
+     * @param number
+     * @return
+     */
+    @Override
+    public R addMemberCoupon(String couponId, Integer number, Long userId) {
+        Coupon coupon = couponService.getById(couponId);
+        if (null == coupon) {
+            return R.fail("优惠券不存在");
+        }
+        List<MemberCoupon> memberCouponList = new ArrayList<>();
+        MemberCoupon memberCoupon;
+        Integer sendTotal = 0;
+        Integer sendPerson = 0;
+        Integer sendUserTotal;
+        for (int i = 0; i < number; i++) {
+            memberCoupon = new MemberCoupon();
+            memberCoupon.setDelFlag(0);
+            memberCoupon.setCouponId(coupon.getCouponId());
+            memberCoupon.setUserId(userId);
+            memberCoupon.setShopId(coupon.getShopId());
+            memberCoupon.setCouponType(coupon.getCouponType());
+            if (coupon.getCouponType() == 1) {
+                memberCoupon.setMoneyThreshold(coupon.getMoneyThreshold());
+                memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
+            } else if (coupon.getCouponType() == 2) {
+                memberCoupon.setDiscountPercent(coupon.getDiscountPercent());
+            } else if (coupon.getCouponType() == 3) {
+                memberCoupon.setDiscountMoney(coupon.getDiscountMoney());
+            } else {
+                memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
+            }
+            memberCoupon.setCouponStatus(coupon.getCouponStatus());
+            memberCoupon.setCouponName(coupon.getCouponName());
+            memberCoupon.setSendType(coupon.getSendType());
+            memberCoupon.setSendTarget(coupon.getSendTarget());
+            memberCoupon.setSendTimeType(coupon.getSendTimeType());
+            memberCoupon.setSendTime(coupon.getSendTime());
+            memberCoupon.setUseScope(coupon.getUseScope());
+            if (memberCoupon.getUseScope() == 2) {
+                memberCoupon.setRelGoodsIds(coupon.getRelGoodsIds());
+            }
+            memberCoupon.setValidTimeType(coupon.getValidTimeType());
+            memberCoupon.setValidStartTime(coupon.getValidStartTime());
+            memberCoupon.setValidEndTime(coupon.getValidEndTime());
+            memberCoupon.setValidDay(coupon.getValidDay());
+            memberCoupon.setCouponFrom(coupon.getCouponFrom());
+            memberCoupon.setReceiveTime(new Date());
+            //有效期处理1.时间段2.领取之日起
+            if (coupon.getValidTimeType() == 1) {
+                memberCoupon.setDeadlineTime(coupon.getValidEndTime());
+            } else if (coupon.getValidTimeType() == 2) {
+                memberCoupon.setDeadlineTime(DateUtils.addDays(new Date(), coupon.getValidDay()));
+            }
+            memberCouponList.add(memberCoupon);
+            sendTotal = sendTotal + 1;
+            if (coupon.getSendType() == 1) {
+                sendUserTotal = this.totalMemberCouponByUserAndCoupon(userId, coupon.getCouponId());
+                if (sendUserTotal != null && sendUserTotal > 0) {
+                } else {
+                    sendPerson = sendPerson + 1;
+                }
+            }
+            memberCouponRecordService.updateMemberCouponRecord(coupon, userId, 1);
+        }
+        this.saveBatch(memberCouponList);
+        //处理优惠券统计
+        if (sendTotal > 0) {
+            couponMapper.updateCouponTotal(coupon.getCouponId(), sendTotal, sendPerson);
+        }
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
index bd779ac..1161275 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -1,5 +1,4 @@
 package com.ruoyi.member.service.impl.member;
-import com.google.common.collect.Lists;
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import com.alibaba.fastjson.JSONObject;
@@ -8,6 +7,7 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.DateUtils;
@@ -21,7 +21,6 @@
 import com.ruoyi.member.domain.pojo.member.IntegralRecord;
 import com.ruoyi.member.domain.pojo.member.MemberArchive;
 import com.ruoyi.member.domain.pojo.member.MemberTotal;
-import com.ruoyi.member.domain.vo.MerMemberTotalVo;
 import com.ruoyi.member.domain.vo.*;
 import com.ruoyi.member.mapper.member.MemberMapper;
 import com.ruoyi.member.service.member.IntegralRecordService;
@@ -2257,14 +2256,43 @@
         List<Member> mobileList = memberMapper.listTodayBirthday();
         if(mobileList!=null&&!mobileList.isEmpty()){
             log.info("生日祝福发送短信---"+mobileList.toString());
-            for(Member member : mobileList){
+            for (Member member : mobileList) {
                 try {
                     String msg = "{\"name\":\"" + (StringUtils.isEmpty(member.getRealName()) ? member.getNickName() : member.getRealName()) + "\"}";
-                    MsgUtils.sendMsg(member.getMobile(),null, msg);
+                    MsgUtils.sendMsg(member.getMobile(), null, msg);
                 } catch (Exception e) {
                     throw new RuntimeException(e);
                 }
             }
         }
     }
+    
+    
+    /**
+     * 手动添加用户积分
+     *
+     * @param integral
+     * @param userId
+     * @return
+     */
+    @Override
+    public R addIntegralRecord(Integer integral, Long userId, String orderId) {
+        Member member = this.getByUserId(userId);
+        MemberTotal memberTotal = memberTotalService.getById(member.getMemberId());
+        IntegralRecord integralRecord = new IntegralRecord();
+        integralRecord.setDelFlag(0);
+        integralRecord.setUserId(userId);
+        integralRecord.setChangeType(6);
+        integralRecord.setChangeIntegral(integral);
+        integralRecord.setSurpIntegral(memberTotal.getUseableIntegral() + integral);
+        integralRecord.setCreateTime(new Date());
+        integralRecord.setOrderId(orderId);
+        integralRecord.setChangeReason("抽奖活动获得");
+        integralRecordService.save(integralRecord);
+        memberTotal.setTotalIntegral(memberTotal.getTotalIntegral() + integral);
+        memberTotal.setUseableIntegral(memberTotal.getUseableIntegral() + integral);
+        memberTotal.setPlSuggestFlag(1);
+        memberTotalService.saveOrUpdate(memberTotal);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java
index 4ec7fa2..e600c13 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.member.domain.dto.AppMemberCouponPageDto;
 import com.ruoyi.member.domain.dto.MerGoodsCouponListDto;
 import com.ruoyi.member.domain.vo.AppMemberCouponPageVo;
@@ -107,16 +108,26 @@
      * @return  List<MerMemberCouponVo>
      */
     List<MerMemberCouponVo> listMerShopGoodsMemberCoupon(MerGoodsCouponListDto merGoodsCouponListDto);
-
+    
     /**
-     * @description  确认核销优惠券
-     * @author  jqs
-     * @date    2023/8/15 11:21
      * @param memberCouponId
      * @param shopId
-     * @return  void
+     * @return void
+     * @description 确认核销优惠券
+     * @author jqs
+     * @date 2023/8/15 11:21
      */
-    void sureMemberCoupon(Long memberCouponId,Long shopId);
-
+    void sureMemberCoupon(Long memberCouponId, Long shopId);
+    
     void insert(MemberCoupon memberCoupon);
+    
+    
+    /**
+     * 手动添加用户优惠券
+     *
+     * @param couponId
+     * @param number
+     * @return
+     */
+    R addMemberCoupon(String couponId, Integer number, Long userId);
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
index 05932d0..382d6ec 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.member.domain.dto.*;
 import com.ruoyi.member.domain.vo.*;
 import com.ruoyi.system.api.domain.dto.*;
@@ -380,13 +381,23 @@
      * @return  void
      */
     void updateMemberShopName(MgtMemberShopNameDto mgtMemberShopNameDto);
-
+    
     /**
-     * @description  发送生日祝福
-     * @author  jqs
-     * @date    2023/8/7 15:40
      * @param
-     * @return  void
+     * @return void
+     * @description 发送生日祝福
+     * @author jqs
+     * @date 2023/8/7 15:40
      */
     void sendBirthdayBless();
+    
+    
+    /**
+     * 手动添加用户积分
+     *
+     * @param integral
+     * @param userId
+     * @return
+     */
+    R addIntegralRecord(Integer integral, Long userId, String orderId);
 }
diff --git a/ruoyi-modules/ruoyi-order/pom.xml b/ruoyi-modules/ruoyi-order/pom.xml
index 0a4d68d..9db90d8 100644
--- a/ruoyi-modules/ruoyi-order/pom.xml
+++ b/ruoyi-modules/ruoyi-order/pom.xml
@@ -155,6 +155,12 @@
             <artifactId>hutool-all</artifactId>
             <version>5.8.22</version>
         </dependency>
+	    <dependency>
+		    <groupId>com.ruoyi</groupId>
+		    <artifactId>ruoyi-api-goods</artifactId>
+		    <version>3.6.2</version>
+		    <scope>compile</scope>
+	    </dependency>
     </dependencies>
 
     <build>
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
index 726963f..11ebe08 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
@@ -2,7 +2,6 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.R;
-import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.web.controller.BaseController;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.order.domain.dto.*;
@@ -130,7 +129,7 @@
     }
 
     @RequestMapping(value = "/payOrder", method = RequestMethod.POST)
-    @ApiOperation(value = "支付订单")
+    @ApiOperation(value = "支付订单【2.0】")
     public R<AppPlaceOrderVo> payOrder(@RequestBody AppBaseGetDto appBaseGetDto) {
         Long userId = SecurityUtils.getUserId();
         AppPlaceOrderVo appPlaceOrderVo = orderService.payOrder(appBaseGetDto.getId());
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppPlaceOrderVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppPlaceOrderVo.java
index ba4d80f..5db85b9 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppPlaceOrderVo.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppPlaceOrderVo.java
@@ -59,15 +59,16 @@
     @ApiModelProperty(value = "package")
     @JsonProperty("package")
     private String packageStr;
-
+    
     @ApiModelProperty(value = "签名方式")
     private String signType;
-
+    
     @ApiModelProperty(value = "签名")
     private String paySign;
-
+    
     @ApiModelProperty(value = "预支付回话标识")
     private String prepayId;
-
-
+    
+    @ApiModelProperty(value = "是否可抽奖(0=否,1=是)")
+    private Boolean lotteryDraw;
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
index 65d1676..bba0315 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -17,7 +17,6 @@
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
 import com.ruoyi.common.core.constant.CacheConstants;
-import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.enums.UserStatus;
 import com.ruoyi.common.core.exception.ServiceException;
@@ -29,6 +28,8 @@
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.utils.CodeFactoryUtil;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.goods.api.domain.LotteryEvent;
+import com.ruoyi.goods.api.service.LotteryEventClient;
 import com.ruoyi.order.config.WxPayConfiguration;
 import com.ruoyi.order.domain.dto.*;
 import com.ruoyi.order.domain.pojo.account.OrderPayment;
@@ -72,7 +73,6 @@
 import lombok.extern.log4j.Log4j2;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -80,7 +80,6 @@
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.text.NumberFormat;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
@@ -154,18 +153,20 @@
 
     @Resource
     private OrderPaymentService orderPaymentService;
-
+    
     @Resource
     private ProfitSharingService profitSharingService;
-
+    
     @Resource
     private OrderRefundService orderRefundService;
-
+    
     @Value("${wx.pay.callbackPath}")
     private String callbackPath;
     
-
-
+    @Resource
+    private LotteryEventClient lotteryEventClient;
+    
+    
     /**
      * @description: buyGoods
      * @param: appSureOrderDto
@@ -1544,6 +1545,13 @@
         appPlaceOrderVo.setPaySign(payArr[5]);
         appPlaceOrderVo.setPrepayId(orderPayment.getPrepayId());
         // 返回AppPlaceOrderVo对象
+        List<LotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData();
+        if (data.size() > 0) {
+            long count = data.stream().filter(s -> s.getPayMoney().compareTo(order.getPayMoney()) >= 0).count();
+            appPlaceOrderVo.setLotteryDraw(count > 0);
+        } else {
+            appPlaceOrderVo.setLotteryDraw(false);
+        }
         return appPlaceOrderVo;
     }
 
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/miniapp/AppHomeController.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/miniapp/AppHomeController.java
index bf20bb0..e73b8fb 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/miniapp/AppHomeController.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/miniapp/AppHomeController.java
@@ -1,14 +1,22 @@
 package com.ruoyi.shop.controller.miniapp;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.shop.domain.dto.AppNearbyShopDto;
 import com.ruoyi.shop.domain.vo.AppNearbyShopVo;
 import com.ruoyi.shop.domain.vo.AppShopInfoVo;
+import com.ruoyi.shop.service.shop.ShopAppointableTimeService;
+import com.ruoyi.shop.service.shop.ShopNonAppointableTimeService;
 import com.ruoyi.shop.service.shop.ShopService;
 import com.ruoyi.system.api.domain.dto.AppBaseGetDto;
+import com.ruoyi.system.api.domain.dto.AppointmentTimeDto;
+import com.ruoyi.system.api.domain.dto.ShopAppointmentTimeDto;
 import com.ruoyi.system.api.domain.poji.member.Member;
+import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime;
+import com.ruoyi.system.api.domain.poji.shop.ShopNonAppointableTime;
 import com.ruoyi.system.api.service.RemoteMemberService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -19,6 +27,8 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * @author jqs34
@@ -32,21 +42,26 @@
 @RequestMapping("/app/home")
 @Log4j2
 public class AppHomeController {
-
-
+    
     @Resource
     private RemoteMemberService memberService;
-
-
+    
     @Resource
     private ShopService shopService;
-
+    
+    @Resource
+    private ShopNonAppointableTimeService shopNonAppointableTimeService;
+    
+    @Resource
+    private ShopAppointableTimeService shopAppointableTimeService;
+    
+    
     @RequestMapping(value = "/getNearbyShop", method = RequestMethod.POST)
     @ApiOperation(value = "获取最近商户")
     public R<AppNearbyShopVo> getNearbyShop(@RequestBody AppNearbyShopDto appNearbyShopDto) {
         Long userId = SecurityUtils.getUserId();
         Member member = null;
-        if(userId!=null){
+        if (userId != null) {
             member = memberService.getMember(userId).getData();
         }
         log.info("获取最近商户:userId=" + userId + "&appNearbyShopDto=" + JSON.toJSONString(appNearbyShopDto));
@@ -54,14 +69,39 @@
         AppNearbyShopVo appNearbyShopVo = shopService.getNearbyShop(appNearbyShopDto,member);
         return R.ok(appNearbyShopVo);
     }
-
-
+    
+    
     @RequestMapping(value = "/getShopInfo", method = RequestMethod.POST)
     @ApiOperation(value = "获取商户详情")
     public R<AppShopInfoVo> getShopInfo(@RequestBody AppBaseGetDto appBaseGetDto) {
         AppShopInfoVo appShopInfoVo = shopService.getAppShopInfo(Long.valueOf(appBaseGetDto.getId()));
         return R.ok(appShopInfoVo);
     }
-
-
+    
+    @RequestMapping(value = "/getShopAppointmentTime", method = RequestMethod.POST)
+    @ApiOperation(value = "获取商户不可预约时间段【2.0】")
+    public R<List<ShopNonAppointableTime>> getShopAppointmentTime(@RequestBody ShopAppointmentTimeDto dto) {
+        List<ShopNonAppointableTime> list = shopNonAppointableTimeService.list(new QueryWrapper<ShopNonAppointableTime>().eq("shop_id", dto.getId())
+                .last(" and '" + dto.getDate() + "' like CONCAT('%', non_appointable_start_time, '%') order by non_appointable_start_time"));
+        return R.ok(list);
+    }
+    
+    @RequestMapping(value = "/appointmentTime", method = RequestMethod.POST)
+    @ApiOperation(value = "门店详情预约操作【2.0】")
+    public R appointmentTime(@RequestBody AppointmentTimeDto dto) {
+        ShopAppointableTime one = shopAppointableTimeService.getOne(new LambdaQueryWrapper<ShopAppointableTime>().eq(ShopAppointableTime::getShopId, dto.getShopId())
+                .eq(ShopAppointableTime::getAppointableTime, dto.getTime()));
+        if (null != one) {
+            return R.fail("不能重复预约");
+        }
+        Long userId = SecurityUtils.getUserId();
+        one = new ShopAppointableTime();
+        one.setShopId(dto.getShopId());
+        one.setAppointableTime(dto.getTime());
+        one.setUserId(userId);
+        one.setStatus(1);
+        one.setCreateTime(LocalDateTime.now());
+        shopAppointableTimeService.save(one);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopAppointableTimeMapper.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopAppointableTimeMapper.java
new file mode 100644
index 0000000..3cfdc6e
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopAppointableTimeMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.shop.mapper.shop;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 15:13
+ */
+public interface ShopAppointableTimeMapper extends BaseMapper<ShopAppointableTime> {
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopNonAppointableTimeMapper.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopNonAppointableTimeMapper.java
new file mode 100644
index 0000000..46bf387
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopNonAppointableTimeMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.shop.mapper.shop;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.api.domain.poji.shop.ShopNonAppointableTime;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 14:31
+ */
+public interface ShopNonAppointableTimeMapper extends BaseMapper<ShopNonAppointableTime> {
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopAppointableTimeServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopAppointableTimeServiceImpl.java
new file mode 100644
index 0000000..00ea027
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopAppointableTimeServiceImpl.java
@@ -0,0 +1,13 @@
+package com.ruoyi.shop.service.impl.shop;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.shop.mapper.shop.ShopAppointableTimeMapper;
+import com.ruoyi.shop.service.shop.ShopAppointableTimeService;
+import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 15:15
+ */
+public class ShopAppointableTimeServiceImpl extends ServiceImpl<ShopAppointableTimeMapper, ShopAppointableTime> implements ShopAppointableTimeService {
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopNonAppointableTimeServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopNonAppointableTimeServiceImpl.java
new file mode 100644
index 0000000..4cd7e86
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopNonAppointableTimeServiceImpl.java
@@ -0,0 +1,15 @@
+package com.ruoyi.shop.service.impl.shop;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.shop.mapper.shop.ShopNonAppointableTimeMapper;
+import com.ruoyi.shop.service.shop.ShopNonAppointableTimeService;
+import com.ruoyi.system.api.domain.poji.shop.ShopNonAppointableTime;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 14:31
+ */
+@Service
+public class ShopNonAppointableTimeServiceImpl extends ServiceImpl<ShopNonAppointableTimeMapper, ShopNonAppointableTime> implements ShopNonAppointableTimeService {
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopAppointableTimeService.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopAppointableTimeService.java
new file mode 100644
index 0000000..052c43d
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopAppointableTimeService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.shop.service.shop;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 15:14
+ */
+public interface ShopAppointableTimeService extends IService<ShopAppointableTime> {
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopNonAppointableTimeService.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopNonAppointableTimeService.java
new file mode 100644
index 0000000..14734a2
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopNonAppointableTimeService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.shop.service.shop;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.api.domain.poji.shop.ShopNonAppointableTime;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/5/26 14:30
+ */
+public interface ShopNonAppointableTimeService extends IService<ShopNonAppointableTime> {
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/miniapp/AppHomeController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/miniapp/AppHomeController.java
index d28964c..95b3b2e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/miniapp/AppHomeController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/miniapp/AppHomeController.java
@@ -48,28 +48,28 @@
 
 
     @RequestMapping(value = "/getHomeBanner", method = RequestMethod.POST)
-    @ApiOperation(value = "获取首页banner")
+    @ApiOperation(value = "获取首页banner【2.0】")
     public R<List<AppBannerVo>> getHomeBanner() {
         List<AppBannerVo> appBannerVoList = bannerService.listHomeBannerVo();
         return R.ok(appBannerVoList);
     }
-
+    
     @RequestMapping(value = "/getQuickEntry", method = RequestMethod.POST)
-    @ApiOperation(value = "获取首页快速入口")
+    @ApiOperation(value = "获取首页快速入口【2.0】")
     public R<List<AppQuickEntryVo>> getQuickEntry() {
         List<AppQuickEntryVo> appQuickEntryVoList = quickEntryService.listQuickEntryVo();
         return R.ok(appQuickEntryVoList);
     }
-
+    
     @RequestMapping(value = "/getAdvert", method = RequestMethod.POST)
-    @ApiOperation(value = "获取首页广告")
+    @ApiOperation(value = "获取首页广告【2.0】")
     public R<AppAdvertVo> getAdvert() {
         AppAdvertVo appAdvertVo = advertService.getAdvertVo();
         return R.ok(appAdvertVo);
     }
-
+    
     @RequestMapping(value = "/getPop", method = RequestMethod.POST)
-    @ApiOperation(value = "获取弹窗")
+    @ApiOperation(value = "获取弹窗【2.0】")
     public R<AppPopVo> getAppPop() {
         AppPopVo appPopVo = popService.getAppPop();
         return R.ok(appPopVo);
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Advert.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Advert.java
index fb56804..15c3fbb 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Advert.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Advert.java
@@ -54,16 +54,21 @@
     @TableField("target_type")
     private Integer targetType;
     /**
-     * 链接类型1.手动输入2.选择已有
+     * 链接类型1.跳转地址,2=跳转小程序
      */
     @TableField("link_type")
     private Integer linkType;
+    /**
+     * 小程序appid
+     */
+    @TableField("appid")
+    private String appid;
     /**
      * 链接地址
      */
     @TableField("link_url")
     private String linkUrl;
-
+    
     /**
      * 跳转类型1.门店详情2.秒杀活动3领券中心4.商城列表5.关于洪瑞堂6.赚取积分7.建议有奖
      */
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Banner.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Banner.java
index f333dd7..17ffcbd 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Banner.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Banner.java
@@ -57,11 +57,16 @@
     @TableField("target_type")
     private Integer targetType;
     /**
-     * 链接类型1.手动输入2.选择已有
+     * 链接类型1.跳转地址,2=跳转小程序
      */
     @TableField("link_type")
     private Integer linkType;
     /**
+     * 小程序appid
+     */
+    @TableField("appid")
+    private String appid;
+    /**
      * 链接地址
      */
     @TableField("link_url")
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Pop.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Pop.java
index da18b6e..663d0bb 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Pop.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/Pop.java
@@ -66,11 +66,16 @@
     @TableField("link_url")
     private String linkUrl;
     /**
-     * 链接类型1.手动输入2.选择已有
+     * 链接类型1.跳转地址,2=跳转小程序
      */
     @TableField("link_type")
     private Integer linkType;
     /**
+     * 小程序appid
+     */
+    @TableField("appid")
+    private String appid;
+    /**
      * 跳转活动id
      */
     @TableField("jump_id")
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/QuickEntry.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/QuickEntry.java
index d955391..7b68d64 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/QuickEntry.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/config/QuickEntry.java
@@ -56,11 +56,16 @@
     @TableField("target_type")
     private Integer targetType;
     /**
-     * 链接类型1.手动输入2.选择已有
+     * 链接类型1.跳转地址,2、跳转小程序
      */
     @TableField("link_type")
     private Integer linkType;
     /**
+     * 小程序appid
+     */
+    @TableField("appid")
+    private String appid;
+    /**
      * 链接地址
      */
     @TableField("link_url")
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppAdvertVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppAdvertVo.java
index 761d372..fb75767 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppAdvertVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppAdvertVo.java
@@ -15,28 +15,31 @@
 
     @ApiModelProperty(value = "广告入口")
     private Long adId;
-
+    
     @ApiModelProperty(value = "广告图片地址")
     private String adUrl;
-
+    
     @ApiModelProperty(value = "广告语")
     private String adContent;
-
+    
     @ApiModelProperty(value = "对象类型1.外链2.内链3.无")
     private Integer targetType;
-
-    @ApiModelProperty(value = "链接类型1.手动输入2.选择已有")
+    
+    @ApiModelProperty(value = "链接类型1.跳转地址,2、跳转小程序")
     private Integer linkType;
-
+    
+    @ApiModelProperty(value = "小程序appid")
+    private String appid;
+    
     @ApiModelProperty(value = "链接地址")
     private String linkUrl;
-
+    
     @ApiModelProperty(value = "跳转类型1.门店详情2.秒杀活动3领券中心4.商城列表5.关于洪瑞堂6.赚取积分7.建议有奖")
     private Integer jumpType;
-
+    
     @ApiModelProperty(value = "跳转id")
     private String jumpId;
-
+    
     @ApiModelProperty(value = "logo地址")
     private String logoUrl;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppBannerVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppBannerVo.java
index 5afbdc1..583120b 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppBannerVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppBannerVo.java
@@ -16,23 +16,26 @@
 
     @ApiModelProperty(value = "bannerid")
     private Long bannerId;
-
+    
     @ApiModelProperty(value = "banner图片地址")
     private String bannerUrl;
-
+    
     @ApiModelProperty(value = "链接类型1.外部2.内部3.无")
     private Integer targetType;
-
-    @ApiModelProperty(value = "链接类型1.手动输入2.选择已有")
+    
+    @ApiModelProperty(value = "链接类型1.跳转地址,2、跳转小程序")
     private Integer linkType;
-
+    
+    @ApiModelProperty(value = "小程序appid")
+    private String appid;
+    
     @ApiModelProperty(value = "链接地址")
     private String linkUrl;
-
+    
     @ApiModelProperty(value = "跳转类型1.门店详情2.秒杀活动3领券中心4.商城列表5.关于洪瑞堂6.赚取积分7.建议有奖")
     private Integer jumpType;
-
+    
     @ApiModelProperty(value = "跳转id")
     private String jumpId;
-
+    
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppPopVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppPopVo.java
index 546afab..a8dbadc 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppPopVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppPopVo.java
@@ -21,9 +21,12 @@
 
     @ApiModelProperty(value = "对象类型1.外链2.内链3.无")
     private Integer targetType;
-
-    @ApiModelProperty(value = "链接类型1.手动输入2.选择已有")
+    
+    @ApiModelProperty(value = "链接类型1.跳转地址,2、跳转小程序")
     private Integer linkType;
+    
+    @ApiModelProperty(value = "小程序appid")
+    private String appid;
 
     @ApiModelProperty(value = "链接地址")
     private String linkUrl;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppQuickEntryVo.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppQuickEntryVo.java
index 8c7eaed..aa00a51 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppQuickEntryVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/AppQuickEntryVo.java
@@ -15,28 +15,30 @@
 
     @ApiModelProperty(value = "快速入口")
     private Long entryId;
-
+    
     @ApiModelProperty(value = "入口图片地址")
     private String entryUrl;
-
+    
     @ApiModelProperty(value = "入口名称")
     private String entryName;
-
+    
     @ApiModelProperty(value = "对象类型1.外链2.内链3.无")
     private Integer targetType;
-
-    @ApiModelProperty(value = "链接类型1.手动输入2.选择已有")
+    
+    @ApiModelProperty(value = "链接类型1.跳转地址,2、跳转小程序")
     private Integer linkType;
-
+    
+    @ApiModelProperty(value = "小程序appid")
+    private String appid;
+    
     @ApiModelProperty(value = "链接地址")
     private String linkUrl;
-
+    
     @ApiModelProperty(value = "跳转类型1.门店详情2.秒杀活动3领券中心4.商城列表5.关于洪瑞堂6.赚取积分7.建议有奖")
     private Integer jumpType;
-
+    
     @ApiModelProperty(value = "跳转id")
     private String jumpId;
-
-
-
+    
+    
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/AdvertMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/AdvertMapper.xml
index 3579590..cd80369 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/AdvertMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/AdvertMapper.xml
@@ -92,15 +92,16 @@
 
     <select id="getAdvertVo" resultType="com.ruoyi.system.domain.vo.AppAdvertVo">
         SELECT
-        ad_id adId,
-        ad_url adUrl,
-        ad_content adContent,
-        link_type linkType,
+        ad_id       adId,
+        ad_url      adUrl,
+        ad_content  adContent,
+        link_type   linkType,
+        appid,
         target_type targetType,
-        link_url linkUrl,
-        jump_type jumpType,
-        jump_id jumpId,
-        logo_url logoUrl
+        link_url    linkUrl,
+        jump_type   jumpType,
+        jump_id     jumpId,
+        logo_url    logoUrl
         FROM t_advert WHERE del_flag = 0 ORDER BY create_time DESC LIMIT 1
     </select>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/BannerMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/BannerMapper.xml
index b62505c..025d846 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/BannerMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/BannerMapper.xml
@@ -97,13 +97,14 @@
 
     <select id="listHomeBannerVo" resultType="com.ruoyi.system.domain.vo.AppBannerVo">
         SELECT
-        banner_id bannerId,
-        banner_url bannerUrl,
+        banner_id   bannerId,
+        banner_url  bannerUrl,
         target_type targetType,
-        link_type linkType,
-        link_url linkUrl,
-        jump_type jumpType,
-        jump_id jumpId
+        link_type   linkType,
+        appid,
+        link_url    linkUrl,
+        jump_type   jumpType,
+        jump_id     jumpId
         FROM t_banner WHERE del_flag = 0 AND banner_position = 1
         ORDER BY banner_sort DESC,create_time DESC LIMIT 5
     </select>
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/PopMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/PopMapper.xml
index 2ee342f..f2f9820 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/PopMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/PopMapper.xml
@@ -114,13 +114,14 @@
 
     <select id="getAppPop" resultType="com.ruoyi.system.domain.vo.AppPopVo">
         SELECT
-        pop_id popId,
-        pop_url popUrl,
-        link_type linkType,
+        pop_id      popId,
+        pop_url     popUrl,
+        link_type   linkType,
+        appid,
         target_type targetType,
-        link_url linkUrl,
-        jump_type jumpType,
-        jump_id jumpId
+        link_url    linkUrl,
+        jump_type   jumpType,
+        jump_id     jumpId
         FROM t_pop
         WHERE del_flag = 0 AND CURDATE() BETWEEN show_start_time AND show_end_time
         ORDER BY pop_sort,create_time DESC LIMIT 1
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/QuickEntryMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/QuickEntryMapper.xml
index 788901d..262e19a 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/QuickEntryMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/QuickEntryMapper.xml
@@ -91,17 +91,18 @@
     </delete>
 
     <select id="listQuickEntryVo" resultType="com.ruoyi.system.domain.vo.AppQuickEntryVo">
-        SELECT
-        entry_id entryId,
-        entry_url entryUrl,
-        entry_name entryName,
-        link_type linkType,
-        target_type targetType,
-        link_url linkUrl,
-        jump_type jumpType,
-        jump_id jumpId
-        FROM t_quick_entry WHERE del_flag = 0
-        ORDER BY entry_sort,create_time DESC
+        SELECT entry_id    entryId,
+               entry_url   entryUrl,
+               entry_name  entryName,
+               link_type   linkType,
+               appid,
+               target_type targetType,
+               link_url    linkUrl,
+               jump_type   jumpType,
+               jump_id     jumpId
+        FROM t_quick_entry
+        WHERE del_flag = 0
+        ORDER BY entry_sort, create_time DESC
     </select>
 
     <select id="pageMgtQuickEntry" resultType="com.ruoyi.system.domain.vo.MgtQuickEntryPageVo">

--
Gitblit v1.7.1