From d6a0c57043e8cc20694a3c678bf8e3a8f28f6499 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 29 五月 2025 11:20:14 +0800
Subject: [PATCH] 新增加用户端接口

---
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java |   26 
 ruoyi-modules/ruoyi-member/src/main/resources/mapper/birthday/BirthdayCardMapper.xml                         |   32 +
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberGiftRecord.java       |   14 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java                         |    2 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java       |   19 
 ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEventQuestions.java            |    6 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopAppointableTimeMapper.java             |   16 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppCouponController.java        |   97 +++++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java               |   20 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppLotteryEventController.java    |  156 ++++++++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java             |  119 +++++-
 ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEvent.java                     |   10 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java    |   78 +++
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopAppointableTimeServiceImpl.java  |   22 +
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/miniapp/AppHomeController.java              |   35 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/LotteryEventInfoVo.java                    |    4 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/LotteryEventVo.java                        |    3 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopAppointableTimeService.java           |   15 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/UserLotteryEventVo.java                    |    6 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java           |  303 +++++++++--------
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppMemberController.java        |    2 
 21 files changed, 735 insertions(+), 250 deletions(-)

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
index 4dd2f3d..b42026e 100644
--- 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
@@ -60,15 +60,5 @@
 	 */
 	@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
index a3a86c7..e7f51c4 100644
--- 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
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 /**
@@ -46,4 +47,9 @@
 	 */
 	@TableField(value = "status")
 	private Integer status;
+	/**
+	 * 正确率
+	 */
+	@TableField(value = "correct_answer_rate")
+	private BigDecimal correctAnswerRate;
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberGiftRecord.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberGiftRecord.java
index e6bd7c0..8950d83 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberGiftRecord.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberGiftRecord.java
@@ -49,19 +49,24 @@
      * 礼品id
      */
     @TableField("gift_id")
-    private Long giftId;
+    private String giftId;
     /**
      * 礼物来源1平台2商户
      */
     @TableField("gift_from")
     private Integer giftFrom;
     /**
+     * 奖品来源(1=生日卡,2=抽奖)
+     */
+    @TableField("prize_from")
+    private Integer prizeFrom;
+    /**
      * 商户id
      */
     @TableField("shop_id")
     private Long shopId;
     /**
-     * 礼物类型1优惠券2商品3现金4实物
+     * 礼物类型1优惠券2商品3现金4实物5积分
      */
     @TableField("gift_type")
     private Integer giftType;
@@ -100,6 +105,11 @@
      */
     private BigDecimal money;
     /**
+     * 积分数量
+     */
+    @TableField("integral_number")
+    private Integer integralNumber;
+    /**
      * 创建时间
      */
     @TableField("create_time")
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 ec73b0e..f78331b 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
@@ -119,22 +119,28 @@
             public R<Integer> getUnReplaySuggestVo() {
                 return null;
             }
-
+    
             @Override
             public R<MemberGiftRecord> getVerifyPrize(String verifyPrize) {
                 return R.fail("获取核销奖品信息失败:" + throwable.getMessage());
             }
-
+    
+    
+            @Override
+            public R<MemberGiftRecord> getVerifyPrizeByGiftId(String giftId) {
+                return R.fail("根据礼品id获取数据失败:" + throwable.getMessage());
+            }
+    
             @Override
             public R signShare(IntegralChangeDto integralChangeDto) {
                 return R.fail("积分变动失败:" + throwable.getMessage());
             }
-
+    
             @Override
             public R<Integer> getAreaNewMember(List<Long> shopIdList) {
                 return null;
             }
-
+    
             @Override
             public R updateMemberShopName(MgtMemberShopNameDto mgtMemberShopNameDto) {
                 return R.fail("更新商户绑定会员失败:" + throwable.getMessage());
@@ -165,6 +171,11 @@
             public R addIntegralRecord(Integer integral, Long userId, String orderId) {
                 return R.fail("手动添加用户积分失败:" + throwable.getMessage());
             }
+    
+            @Override
+            public R saveMemberGiftRecord(MemberGiftRecord memberGiftRecord) {
+                return R.fail("添加奖品数据失败:" + throwable.getMessage());
+            }
         };
     }
 }
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 6a1aa7a..54f5d9c 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
@@ -203,6 +203,17 @@
     
     
     /**
+     * @param giftId
+     * @return R<MemberGiftRecord>
+     * @description 根据礼品id获取数据
+     * @author jqs
+     * @date 2023/7/8 17:43
+     */
+    @PostMapping("/member/getVerifyPrizeByGiftId")
+    public R<MemberGiftRecord> getVerifyPrizeByGiftId(@RequestBody String giftId);
+    
+    
+    /**
      * @param integralChangeDto
      * @return R
      * @description 积分变动
@@ -273,4 +284,13 @@
      */
     @PostMapping("/member/addIntegralRecord")
     R addIntegralRecord(@RequestParam("integral") Integer integral, @RequestParam("userId") Long userId, @RequestParam("orderId") String orderId);
+    
+    /**
+     * 添加奖品数据
+     *
+     * @param memberGiftRecord
+     * @return
+     */
+    @PostMapping("/member/saveMemberGiftRecord")
+    R saveMemberGiftRecord(@RequestBody MemberGiftRecord memberGiftRecord);
 }
\ No newline at end of file
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
index 00834ab..aaec304 100644
--- 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
@@ -3,16 +3,16 @@
 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.core.utils.uuid.IdUtils;
 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.api.domain.*;
+import com.ruoyi.goods.domain.dto.AnswerQuestionDto;
+import com.ruoyi.goods.domain.dto.LotteryEventQuestionsDto;
 import com.ruoyi.goods.domain.vo.AppLotteryEventPageVo;
 import com.ruoyi.goods.domain.vo.LotteryEventInfoVo;
+import com.ruoyi.goods.domain.vo.LotteryEventQuestionsVo;
 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.goods.service.lottery.*;
 import com.ruoyi.system.api.domain.dto.LotteryEventListDto;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -23,8 +23,13 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author zhibing.pu
@@ -46,7 +51,14 @@
 	@Resource
 	private IUserLotteryEventQuestionsService userLotteryEventQuestionsService;
 	
+	@Resource
+	private IUserLotteryEventQuestionsAnswersService userLotteryEventQuestionsAnswersService;
 	
+	@Resource
+	private ILotteryEventQuestionsService lotteryEventServiceQuestionsService;
+	
+	@Resource
+	private ILotteryEventQuestionsAnswersService lotteryEventQuestionsAnswersService;
 	
 	
 	@ResponseBody
@@ -103,11 +115,141 @@
 		int count = userLotteryEventService.count(new QueryWrapper<UserLotteryEvent>().eq("lottery_event_id", id).eq("user_id", userId));
 		vo.setParticipation(count > 0);
 		//答题抽奖需要判断是否答题完成
-		if(5 == lotteryEvent.getActivityType()){
+		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);
+			vo.setAnswerStartTime(null != questionsServiceOne ? questionsServiceOne.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : null);
+			vo.setAnswerTimeLimit(lotteryEvent.getAnsweringTime());
 		}
 		return R.ok(vo);
 	}
 	
+	@ResponseBody
+	@PostMapping("/getLotteryEventQuestions")
+	@ApiOperation(value = "获取答题题目【2.0】", tags = "抽奖活动")
+	public R<LotteryEventQuestionsVo> getLotteryEventQuestions(@RequestBody LotteryEventQuestionsDto dto) {
+		Long userId = SecurityUtils.getUserId();
+		UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", dto.getId()).eq("user_id", userId));
+		LotteryEventQuestionsVo vo = new LotteryEventQuestionsVo();
+		int count = lotteryEventServiceQuestionsService.count(new QueryWrapper<LotteryEventQuestions>().eq("lottery_event_id", dto.getId()));
+		vo.setTotal(count);
+		//没有答题,直接从第一题开始
+		if (null == questionsServiceOne) {
+			if (-1 == dto.getStepOrDown()) {
+				return R.fail("操作失败");
+			}
+			LotteryEventQuestions questions = lotteryEventServiceQuestionsService.getOne(new QueryWrapper<LotteryEventQuestions>().eq("lottery_event_id", dto.getId()).orderByAsc("sort"));
+			vo.setCurrent(1);
+			vo.setName(questions.getName());
+			List<LotteryEventQuestionsAnswers> list = lotteryEventQuestionsAnswersService.list(new QueryWrapper<LotteryEventQuestionsAnswers>().eq("lottery_event_questions_id", questions.getId()));
+			//封装答题
+			List<Map<String, String>> options = list.stream().map(item -> {
+				Map<String, String> map = new HashMap<>();
+				map.put("id", item.getId());
+				map.put("name", item.getAnswer());
+				return map;
+			}).collect(Collectors.toList());
+			vo.setOptions(options);
+		} else {
+			//上一题
+			Integer current = dto.getCurrent();
+			if (-1 == dto.getStepOrDown()) {
+				if (current - 1 <= 0) {
+					return R.fail("操作失败");
+				}
+				current--;
+			} else {
+				//下一题
+				if (current >= count) {
+					return R.fail("操作失败");
+				}
+				current++;
+			}
+			List<LotteryEventQuestions> list = lotteryEventServiceQuestionsService.list(new QueryWrapper<LotteryEventQuestions>().eq("lottery_event_id", dto.getId()).orderByAsc("sort"));
+			LotteryEventQuestions lotteryEventQuestions = list.get(current);
+			vo.setCurrent(current);
+			vo.setName(lotteryEventQuestions.getName());
+			List<LotteryEventQuestionsAnswers> list1 = lotteryEventQuestionsAnswersService.list(new QueryWrapper<LotteryEventQuestionsAnswers>().eq("lottery_event_questions_id", lotteryEventQuestions.getId()));
+			//封装答题
+			List<Map<String, String>> options = list1.stream().map(item -> {
+				Map<String, String> map = new HashMap<>();
+				map.put("id", item.getId());
+				map.put("name", item.getAnswer());
+				return map;
+			}).collect(Collectors.toList());
+			if (-1 == dto.getStepOrDown()) {
+				UserLotteryEventQuestionsAnswers one = userLotteryEventQuestionsAnswersService.getOne(new QueryWrapper<UserLotteryEventQuestionsAnswers>().eq("lottery_event_id", dto.getId()).eq("user_id", userId).orderByDesc("create_time").last(" limit 0, 1"));
+				if (null != one) {
+					vo.setAnswer(lotteryEventQuestionsAnswersService.getById(one.getLotteryEventQuestionsAnswersId()).getAnswer());
+				}
+			}
+			vo.setOptions(options);
+		}
+		return R.ok(vo);
+	}
+	
+	@ResponseBody
+	@PostMapping("/answerQuestion")
+	@ApiOperation(value = "答题操作【2.0】", tags = "抽奖活动")
+	public R answerQuestion(@RequestBody AnswerQuestionDto dto) {
+		List<LotteryEventQuestions> list = lotteryEventServiceQuestionsService.list(new QueryWrapper<LotteryEventQuestions>().eq("lottery_event_id", dto.getId()).orderByAsc("sort"));
+		LotteryEventQuestions lotteryEventQuestions = list.get(dto.getCurrent());
+		List<LotteryEventQuestionsAnswers> list1 = lotteryEventQuestionsAnswersService.list(new QueryWrapper<LotteryEventQuestionsAnswers>().eq("lottery_event_questions_id", lotteryEventQuestions.getId()));
+		LotteryEventQuestionsAnswers lotteryEventQuestionsAnswers = list1.stream().filter(item -> item.getAnswer().equals(dto.getAnswer())).findAny().orElse(null);
+		//构建答题数据
+		Long userId = SecurityUtils.getUserId();
+		UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", dto.getId()).eq("user_id", userId));
+		if (null == questionsServiceOne) {
+			questionsServiceOne = new UserLotteryEventQuestions();
+			questionsServiceOne.setId(IdUtils.simpleUUID());
+			questionsServiceOne.setUserId(userId);
+			questionsServiceOne.setLotteryEventId(dto.getId());
+			questionsServiceOne.setStatus(1);
+			questionsServiceOne.setCreateTime(LocalDateTime.now());
+			userLotteryEventQuestionsService.save(questionsServiceOne);
+		}
+		//构建或者修改答题数据
+		UserLotteryEventQuestionsAnswers one = userLotteryEventQuestionsAnswersService.getOne(new QueryWrapper<UserLotteryEventQuestionsAnswers>().eq("lottery_event_question_id", lotteryEventQuestions.getId()).eq("user_id", userId));
+		if (null == one) {
+			one = new UserLotteryEventQuestionsAnswers();
+			one.setId(IdUtils.simpleUUID());
+			one.setLotteryEventId(dto.getId());
+			one.setUserId(userId);
+			one.setLotteryEventQuestionId(lotteryEventQuestions.getId());
+			one.setLotteryEventQuestionsAnswersId(lotteryEventQuestionsAnswers.getId());
+			one.setCreateTime(LocalDateTime.now());
+		}
+		one.setIsCorrect(0);
+		//答案正确
+		if (null != lotteryEventQuestionsAnswers && 1 == lotteryEventQuestionsAnswers.getIsRight()) {
+			one.setIsCorrect(1);
+		}
+		userLotteryEventQuestionsAnswersService.saveOrUpdate(one);
+		return R.ok();
+	}
+	
+	@ResponseBody
+	@PostMapping("/endAnswerQuestion/{id}")
+	@ApiOperation(value = "结束答题【2.0】", tags = "抽奖活动")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "id", value = "抽奖活动id", required = true, dataType = "String", paramType = "path")
+	})
+	public R<Boolean> endAnswerQuestion(@PathVariable("id") String id) {
+		Long userId = SecurityUtils.getUserId();
+		LotteryEvent lotteryEvent = lotteryEventService.getById(id);
+		UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", id).eq("user_id", userId));
+		questionsServiceOne.setStatus(2);
+		questionsServiceOne.setEndTime(LocalDateTime.now());
+		//计算正确率
+		List<UserLotteryEventQuestionsAnswers> list = userLotteryEventQuestionsAnswersService.list(new QueryWrapper<UserLotteryEventQuestionsAnswers>().eq("lottery_event_id", id).eq("user_id", userId));
+		int count = list.size();
+		int right = list.stream().filter(item -> 1 == item.getIsCorrect()).collect(Collectors.toList()).size();
+		BigDecimal multiply = new BigDecimal(right).divide(new BigDecimal(count), 4, BigDecimal.ROUND_HALF_UP).setScale(4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100));
+		questionsServiceOne.setCorrectAnswerRate(multiply);
+		userLotteryEventQuestionsService.updateById(questionsServiceOne);
+		if (multiply.compareTo(lotteryEvent.getAccuracy()) >= 0) {
+			return R.ok(true);
+		}
+		return R.ok(false);
+	}
 }
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
index aad7b79..ff63166 100644
--- 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
@@ -25,4 +25,8 @@
 	private Boolean participation;
 	@ApiModelProperty(value = "是否继续答题(0=未开始,1=已开始,2=已结束)")
 	private Integer continueAnswer;
+	@ApiModelProperty(value = "答题开始时间")
+	private String answerStartTime;
+	@ApiModelProperty(value = "答题时限")
+	private Integer answerTimeLimit;
 }
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
index ba7f3e8..87b1fcd 100644
--- 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
@@ -5,6 +5,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -24,6 +25,8 @@
 	private List<LotteryEventPrize> prizeList;
 	@ApiModelProperty(value = "剩余次数")
 	private Integer laveTimes;
+	@ApiModelProperty(value = "答题正确率")
+	private BigDecimal correctAnswerRate;
 	@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
index 775a125..ed3cd97 100644
--- 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
@@ -19,4 +19,10 @@
 	private Integer number;
 	@ApiModelProperty("核销码")
 	private String verifyCode;
+	@ApiModelProperty("是否已核销(0=否,1=是)")
+	private Integer isVerify;
+	@ApiModelProperty("核销时间")
+	private String verifyTime;
+	@ApiModelProperty("核销门店")
+	private String verifyShop;
 }
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 5c1bc6a..b83e9cb 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
@@ -10,22 +10,27 @@
 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.api.domain.UserLotteryEventQuestions;
 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.IUserLotteryEventQuestionsService;
 import com.ruoyi.goods.service.lottery.IUserLotteryEventService;
+import com.ruoyi.system.api.domain.poji.member.Member;
+import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord;
+import com.ruoyi.system.api.domain.poji.shop.Shop;
 import com.ruoyi.system.api.service.RemoteCouponService;
 import com.ruoyi.system.api.service.RemoteMemberService;
+import com.ruoyi.system.api.service.RemoteShopService;
 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.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
@@ -54,7 +59,10 @@
 	private RedissonClient redissonClient;
 	
 	@Resource
-	private IUserLotteryEventQuestionsAnswersService userLotteryEventQuestionsService;
+	private IUserLotteryEventQuestionsService userLotteryEventQuestionsAnswersService;
+	
+	@Resource
+	private RemoteShopService remoteShopService;
 	
 	
 	/**
@@ -65,6 +73,7 @@
 	 */
 	@Override
 	public LotteryEventVo getLotteryEvent(String id) {
+		Long userId = SecurityUtils.getUserId();
 		LotteryEvent lotteryEvent = this.getById(id);
 		//构建返回结果
 		LotteryEventVo vo = new LotteryEventVo();
@@ -76,14 +85,30 @@
 		//查询抽检活动奖品
 		List<LotteryEventPrize> lotteryEventPrizeList = lotteryEventPrizeService.list(new QueryWrapper<LotteryEventPrize>().eq("lottery_event_id", id));
 		vo.setPrizeList(lotteryEventPrizeList);
-		
+		//答题正确率
+		if (5 == lotteryEvent.getActivityType()) {
+			UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsAnswersService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", id).eq("user_id", userId));
+			if (null == questionsServiceOne) {
+				vo.setCorrectAnswerRate(questionsServiceOne.getCorrectAnswerRate());
+			}
+		}
 		//构建我的奖品明细
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
 		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());
+			MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrizeByGiftId(s.getId()).getData();
+			userLotteryEventVo.setVerifyCode("3-" + memberGiftRecord.getPrizeId());
+			userLotteryEventVo.setIsVerify(1 == memberGiftRecord.getVerifyStatus() ? 0 : 1);
+			userLotteryEventVo.setVerifyTime(null == memberGiftRecord.getVerifyTime() ? "" : sdf.format(memberGiftRecord.getVerifyTime()));
+			Member member = remoteMemberService.getMember(userId).getData();
+			userLotteryEventVo.setVerifyShop("全部门店");
+			if (null != member && null != member.getRelationShopId()) {
+				Shop shop = remoteShopService.getShop(member.getRelationShopId()).getData();
+				userLotteryEventVo.setVerifyShop(shop.getShopName());
+			}
 			return userLotteryEventVo;
 		}).collect(Collectors.toList());
 		vo.setYourPrizeList(collect);
@@ -100,11 +125,12 @@
 	@Override
 	public R lotteryDraw(String id) {
 		Long userId = SecurityUtils.getUserId();
+		Member member = remoteMemberService.getMember(userId).getData();
 		LotteryEvent lotteryEvent = this.getById(id);
 		//判断答题抽奖是否满足抽奖条件
 		if (lotteryEvent.getActivityType() == 5) {
-			BigDecimal correctAnswerRate = userLotteryEventQuestionsService.getCorrectAnswerRate(userId, id);
-			if (correctAnswerRate.compareTo(lotteryEvent.getAccuracy()) < 0) {
+			UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsAnswersService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", id).eq("user_id", userId));
+			if (questionsServiceOne.getCorrectAnswerRate().compareTo(lotteryEvent.getAccuracy()) < 0) {
 				return R.fail("答题抽奖失败,答题正确率低于活动要求");
 			}
 		}
@@ -145,11 +171,6 @@
 				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);
@@ -160,6 +181,39 @@
 				}
 				userLotteryEvent.setCreateTime(LocalDateTime.now());
 				userLotteryEventService.save(userLotteryEvent);
+				//添加奖品数据
+				MemberGiftRecord memberGiftRecord = new MemberGiftRecord();
+				memberGiftRecord.setPrizeId(IdUtils.simpleUUID());
+				memberGiftRecord.setDelFlag(0);
+				memberGiftRecord.setUserId(userId);
+				memberGiftRecord.setGiftId(userLotteryEvent.getId());
+				memberGiftRecord.setGiftFrom(1);
+				memberGiftRecord.setShopId(member.getRelationShopId());
+				switch (lotteryEventPrize.getPrizeType()) {
+					case 1:
+						memberGiftRecord.setGiftType(1);
+						memberGiftRecord.setCouponId(userLotteryEvent.getObjectId());
+						memberGiftRecord.setCouponNumber(userLotteryEvent.getNumber());
+						break;
+					case 2:
+						memberGiftRecord.setGiftType(2);
+						memberGiftRecord.setGoodsId(userLotteryEvent.getObjectId());
+						memberGiftRecord.setGoodsNumber(userLotteryEvent.getNumber());
+						break;
+					case 3:
+						memberGiftRecord.setGiftType(4);
+						memberGiftRecord.setGiftName(userLotteryEvent.getObjectName());
+						memberGiftRecord.setGiftNumber(userLotteryEvent.getNumber());
+						break;
+					case 4:
+						memberGiftRecord.setGiftType(5);
+						memberGiftRecord.setIntegralNumber(userLotteryEvent.getNumber());
+						break;
+				}
+				memberGiftRecord.setPrizeFrom(2);
+				memberGiftRecord.setCreateTime(new Date());
+				memberGiftRecord.setVerifyStatus(1);
+				remoteMemberService.saveMemberGiftRecord(memberGiftRecord);
 				return R.ok();
 			}
 		} catch (Exception e) {
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 8dd6dda..c9af95a 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
@@ -1,5 +1,6 @@
 package com.ruoyi.member.controller.console;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.controller.BaseController;
 import com.ruoyi.member.service.birthday.BirthdayCardService;
@@ -25,58 +26,53 @@
 @RestController
 @RequestMapping("/member")
 public class MemberController extends BaseController {
-
+    
     @Resource
     private MemberService memberService;
-
+    
     @Resource
     private MemberSuggestService memberSuggestService;
-
+    
     @Resource
     private MemberGiftRecordService memberGiftRecordService;
-
+    
     @Resource
     private BirthdayCardService birthdayCardService;
-
+    
     @Resource
     private RemoteShopService remoteShopService;
-
-
-
-
-
+    
+    
     /**
-    * @description: getMember
-    * @param: userId
-    * @return: R<Member>
-    * @author jqs34
-    * @date: 2023/4/30 12:49
-    */
-
+     * @description: getMember
+     * @param: userId
+     * @return: R<Member>
+     * @author jqs34
+     * @date: 2023/4/30 12:49
+     */
+    
     @PostMapping("/getMember")
-    public R<Member> getMember(@RequestBody Long userId)
-    {
+    public R<Member> getMember(@RequestBody Long userId) {
         Member member = memberService.getByUserId(userId);
-        if(member ==null){
+        if (member == null) {
             return R.fail("获取会员失败!");
         }
         return R.ok(member);
     }
-
+    
     /**
      * 小程序登录
      */
     @PostMapping("/miniLogin")
     @ApiOperation("小程序登录")
-    public R<AppMiniLoginVo> getMemberByCode(@RequestBody AppMiniLoginDto appMiniLoginDto)
-    {
+    public R<AppMiniLoginVo> getMemberByCode(@RequestBody AppMiniLoginDto appMiniLoginDto) {
         AppMiniLoginVo appMiniLoginVo = memberService.getMemberByCode(appMiniLoginDto);
-        if(appMiniLoginVo ==null){
+        if (appMiniLoginVo == null) {
             return R.fail("登录失败!");
         }
         return R.ok(appMiniLoginVo);
     }
-
+    
     @PostMapping(value = "/miniRegister")
     @ApiOperation(value = "小程序注册")
     public R<AppMiniRegisterVo> miniRegister(@RequestBody AppMiniRegisterDto appUserRegisterDto) {
@@ -86,241 +82,242 @@
         }
         return R.ok(appUserRegisterVo);
     }
-
-
-
+    
+    
     /**
      * 更新会员绑定商户
+     *
      * @param appMemberBindingDto
      * @return
      */
     @PostMapping("/updateMemberBinding")
-    public R updateMemberBinding(@RequestBody AppMemberBindingDto appMemberBindingDto)
-    {
+    public R updateMemberBinding(@RequestBody AppMemberBindingDto appMemberBindingDto) {
         memberService.updateMemberBinding(appMemberBindingDto);
         return R.ok();
     }
-
+    
     /**
      * 更新会员商品类型
+     *
      * @param appMemberGoodsTypeDto
      * @return
      */
     @PostMapping("/updateMemberGoodsType")
-    public R updateMemberGoodsType(@RequestBody AppMemberGoodsTypeDto appMemberGoodsTypeDto)
-    {
+    public R updateMemberGoodsType(@RequestBody AppMemberGoodsTypeDto appMemberGoodsTypeDto) {
         memberService.updateMemberGoodsType(appMemberGoodsTypeDto);
         return R.ok();
     }
-
+    
     /**
      * 通过手机号获取会员
+     *
      * @param mobile
      * @return
      */
     @PostMapping("/getMemberByMobile")
-    public R<Member> getMemberByMobile(@RequestBody String mobile)
-    {
+    public R<Member> getMemberByMobile(@RequestBody String mobile) {
         Member member = memberService.getByMobile(mobile);
         return R.ok(member);
     }
-
+    
     /**
      * 订单创建新用户
+     *
      * @param member
      * @return
      */
     @PostMapping("/createNewMember")
-    public R createNewMember(@RequestBody Member member)
-    {
+    public R createNewMember(@RequestBody Member member) {
         memberService.createNewMember(member);
         return R.ok();
     }
-
+    
     /**
-     * @description  删除用户标签
-     * @author  jqs
-     * @date    2023/6/8 15:17
      * @param tag
-     * @return  R
+     * @return R
+     * @description 删除用户标签
+     * @author jqs
+     * @date 2023/6/8 15:17
      */
     @PostMapping("/deleteMemberTag")
-    public R deleteMemberTag(@RequestBody String tag)
-    {
+    public R deleteMemberTag(@RequestBody String tag) {
         memberService.deleteMemberTag(tag);
         return R.ok();
     }
-
+    
     /**
-     * @description  删除会员建议标签
-     * @author  jqs
-     * @date    2023/6/9 9:43
      * @param suggestTag
-     * @return  R
+     * @return R
+     * @description 删除会员建议标签
+     * @author jqs
+     * @date 2023/6/9 9:43
      */
     @PostMapping("/deleteMemberSuggestTag")
-    public R deleteMemberSuggestTag(@RequestBody String suggestTag)
-    {
+    public R deleteMemberSuggestTag(@RequestBody String suggestTag) {
         memberSuggestService.deleteMemberSuggestTag(suggestTag);
         return R.ok();
     }
-
-
+    
+    
     /**
-     * @description  通过ids获取用户简易返回
-     * @author  jqs
-     * @date    2023/6/16 11:05
      * @param mgtBaseBathDto
-     * @return  R<List<MgtSimpleMemberVo>>
+     * @return R<List < MgtSimpleMemberVo>>
+     * @description 通过ids获取用户简易返回
+     * @author jqs
+     * @date 2023/6/16 11:05
      */
     @PostMapping("/listSimpleVoByIds")
-    public R<List<MgtSimpleMemberVo>> listSimpleVoByIds(@RequestBody String userIds)
-    {List<MgtSimpleMemberVo> simpleMemberVoList = memberService.listSimpleVoByIds(userIds);
+    public R<List<MgtSimpleMemberVo>> listSimpleVoByIds(@RequestBody String userIds) {
+        List<MgtSimpleMemberVo> simpleMemberVoList = memberService.listSimpleVoByIds(userIds);
         return R.ok(simpleMemberVoList);
     }
-
+    
     /**
-     * @description
-     * @author  jqs
-     * @date    2023/6/16 12:47
      * @param mgtUserIdByKeywordDto
-     * @return  R<MgtUserIdByKeywordVo>
+     * @return R<MgtUserIdByKeywordVo>
+     * @description
+     * @author jqs
+     * @date 2023/6/16 12:47
      */
     @PostMapping("/getUserIdByKeyword")
-    public R<MgtUserIdByKeywordVo> getUserIdByKeyword(@RequestBody MgtUserIdByKeywordDto mgtUserIdByKeywordDto)
-    {
+    public R<MgtUserIdByKeywordVo> getUserIdByKeyword(@RequestBody MgtUserIdByKeywordDto mgtUserIdByKeywordDto) {
         MgtUserIdByKeywordVo mgtUserIdByKeywordVo = memberService.getUserIdByKeyword(mgtUserIdByKeywordDto);
         return R.ok(mgtUserIdByKeywordVo);
     }
-
+    
     /**
-    * @description boardMemberTotal
-    * @param
-    * @return R<MgtBulletinBoardVo>
-    * @author jqs34
-    * @date 2023/6/18 16:45
-    */
+     * @param
+     * @return R<MgtBulletinBoardVo>
+     * @description boardMemberTotal
+     * @author jqs34
+     * @date 2023/6/18 16:45
+     */
     @PostMapping("/boardMemberTotal")
-    public R<MgtBulletinBoardVo> boardMemberTotal(@RequestBody BoardMemberTotalDto boardMemberTotalDto)
-    {
+    public R<MgtBulletinBoardVo> boardMemberTotal(@RequestBody BoardMemberTotalDto boardMemberTotalDto) {
         List<Shop> shopList = remoteShopService.getShopBySysUserIds(boardMemberTotalDto);
         List<Long> shopIds = shopList.stream().map(Shop::getShopId).collect(Collectors.toList());
         MgtBulletinBoardVo bulletinBoardVo = memberService.boardMemberTotal(shopIds);
         return R.ok(bulletinBoardVo);
     }
-
+    
     /**
-     * @description  筛选userId年龄段
-     * @author  jqs
-     * @date    2023/6/20 14:31
      * @param mgtActivityAgeDto
-     * @return  R<List<Long>>
+     * @return R<List < Long>>
+     * @description 筛选userId年龄段
+     * @author jqs
+     * @date 2023/6/20 14:31
      */
     @PostMapping("/listUserIdByAge")
-    public R<List<Long>> listUserIdByAge(@RequestBody MgtActivityAgeDto mgtActivityAgeDto)
-    {
+    public R<List<Long>> listUserIdByAge(@RequestBody MgtActivityAgeDto mgtActivityAgeDto) {
         List<Long> userIdList = memberService.listUserIdByAge(mgtActivityAgeDto);
         return R.ok(userIdList);
     }
-
+    
     /**
-     * @description  通过shopId获取userId
-     * @author  jqs
-     * @date    2023/6/21 17:11
      * @param shopIdlist
-     * @return  R<List<Long>>
+     * @return R<List < Long>>
+     * @description 通过shopId获取userId
+     * @author jqs
+     * @date 2023/6/21 17:11
      */
     @PostMapping("/listUserIdByShopId")
-    public R<List<Long>> listUserIdByShopId(@RequestBody List<Long> shopIdlist)
-    {
+    public R<List<Long>> listUserIdByShopId(@RequestBody List<Long> shopIdlist) {
         List<Long> userIdList = memberService.listUserIdByShopId(shopIdlist);
         return R.ok(userIdList);
     }
-
+    
     /**
-     * @description  通过shopId获取user统计
-     * @author  jqs
-     * @date    2023/6/21 17:22
      * @param shopIdlist
-     * @return  R<MgtShopTotalMemberVo>
+     * @return R<MgtShopTotalMemberVo>
+     * @description 通过shopId获取user统计
+     * @author jqs
+     * @date 2023/6/21 17:22
      */
     @PostMapping("/getUserTotalByShopId")
-    public R<MgtShopTotalMemberVo> getUserTotalByShopId(@RequestBody List<Long> shopIdlist)
-    {
+    public R<MgtShopTotalMemberVo> getUserTotalByShopId(@RequestBody List<Long> shopIdlist) {
         MgtShopTotalMemberVo shopTotalMemberVo = memberService.getUserTotalByShopId(shopIdlist);
         return R.ok(shopTotalMemberVo);
     }
-
+    
     /**
-     * @description  更新会员统计
-     * @author  jqs
-     * @date    2023/6/28 17:52
      * @param memberTotalChangeDto
-     * @return  R
+     * @return R
+     * @description 更新会员统计
+     * @author jqs
+     * @date 2023/6/28 17:52
      */
     @PostMapping("/changeMemberTotal")
-    public R changeMemberTotal(@RequestBody MemberTotalChangeDto memberTotalChangeDto)
-    {
+    public R changeMemberTotal(@RequestBody MemberTotalChangeDto memberTotalChangeDto) {
         memberService.changeMemberTotal(memberTotalChangeDto);
         return R.ok();
     }
-
+    
     /**
-     * @description  获取各年龄层userId
-     * @author  jqs
-     * @date    2023/7/4 9:49
      * @param merTotalDto
-     * @return  R<MerOrderAgeUserVo>
+     * @return R<MerOrderAgeUserVo>
+     * @description 获取各年龄层userId
+     * @author jqs
+     * @date 2023/7/4 9:49
      */
     @PostMapping("/listOrderAgeUser")
-    public R<List<MerOrderAgeUserVo>> listOrderAgeUser(@RequestBody MerTotalDto merTotalDto)
-    {
+    public R<List<MerOrderAgeUserVo>> listOrderAgeUser(@RequestBody MerTotalDto merTotalDto) {
         List<MerOrderAgeUserVo> orderAgeUserVoList = memberService.listOrderAgeUser(merTotalDto);
         return R.ok(orderAgeUserVoList);
     }
-
+    
     /**
-     * @description  获取未回复数量
-     * @author  jqs
-     * @date    2023/7/5 12:49
      * @param
-     * @return  R<Integer>
+     * @return R<Integer>
+     * @description 获取未回复数量
+     * @author jqs
+     * @date 2023/7/5 12:49
      */
     @PostMapping("/getUnReplaySuggestVo")
-    public R<Integer> getUnReplaySuggestVo()
-    {
+    public R<Integer> getUnReplaySuggestVo() {
         Integer count = memberSuggestService.getUnReplaySuggestVo();
         return R.ok(count);
     }
-
+    
     /**
-     * @description  获取核销奖品
-     * @author  jqs
-     * @date    2023/7/8 17:43
      * @param verifyPrize
-     * @return  R<MemberGiftRecord>
+     * @return R<MemberGiftRecord>
+     * @description 获取核销奖品
+     * @author jqs
+     * @date 2023/7/8 17:43
      */
     @PostMapping("/getVerifyPrize")
-    public R<MemberGiftRecord> getVerifyPrize(@RequestBody String verifyPrize)
-    {
+    public R<MemberGiftRecord> getVerifyPrize(@RequestBody String verifyPrize) {
         MemberGiftRecord memberGiftRecord = memberGiftRecordService.getById(verifyPrize);
         return R.ok(memberGiftRecord);
     }
-
+    
+    
     /**
-     * @description  核销奖品
-     * @author  jqs
-     * @date    2023/8/10 11:56
+     * 根据礼品id获取数据
+     *
+     * @param giftId
+     * @return
+     */
+    @PostMapping("/getVerifyPrizeByGiftId")
+    public R<MemberGiftRecord> getVerifyPrizeByGiftId(@RequestBody String giftId) {
+        MemberGiftRecord memberGiftRecord = memberGiftRecordService.getOne(new QueryWrapper<MemberGiftRecord>().eq("gift_id", giftId));
+        return R.ok(memberGiftRecord);
+    }
+    
+    
+    /**
      * @param merVerifyPrizeFinalDto
-     * @return  R
+     * @return R
+     * @description 核销奖品
+     * @author jqs
+     * @date 2023/8/10 11:56
      */
     @PostMapping("/verifyPrize")
-    public R verifyPrize(@RequestBody MerVerifyPrizeFinalDto merVerifyPrizeFinalDto)
-    {
+    public R verifyPrize(@RequestBody MerVerifyPrizeFinalDto merVerifyPrizeFinalDto) {
         memberGiftRecordService.verifyPrize(merVerifyPrizeFinalDto);
         return R.ok();
     }
-
+    
     /**
      * @description  积分变动
      * @author  jqs
@@ -333,28 +330,27 @@
         memberService.changeIntegral(integralChangeDto);
         return R.ok();
     }
-
+    
     /**
-     * @description  统计商户今日新增会员
-     * @author  jqs
-     * @date    2023/7/14 20:00
      * @param shopIdList
-     * @return  R<Integer>
+     * @return R<Integer>
+     * @description 统计商户今日新增会员
+     * @author jqs
+     * @date 2023/7/14 20:00
      */
     @PostMapping("/getAreaNewMember")
-    public R<Integer> getAreaNewMember(@RequestBody List<Long> shopIdList)
-    {
+    public R<Integer> getAreaNewMember(@RequestBody List<Long> shopIdList) {
         Integer count = memberService.getAreaNewMember(shopIdList);
         return R.ok(count);
     }
-
-
+    
+    
     /**
-     * @description  更新会员绑定商户名
-     * @author  jqs
-     * @date    2023/7/26 17:07
+     * @description 更新会员绑定商户名
+     * @author jqs
+     * @date 2023/7/26 17:07
      * @param mgtMemberShopNameDto
-     * @return  R
+     * @return R
      */
     @PostMapping("/updateMemberShopName")
     public R updateMemberShopName(@RequestBody MgtMemberShopNameDto mgtMemberShopNameDto) {
@@ -386,4 +382,17 @@
     public R addIntegralRecord(@RequestParam("integral") Integer integral, @RequestParam("userId") Long userId, @RequestParam("orderId") String orderId) {
         return memberService.addIntegralRecord(integral, userId, orderId);
     }
+    
+    
+    /**
+     * 添加奖品记录
+     *
+     * @param memberGiftRecord
+     * @return
+     */
+    @PostMapping("/saveMemberGiftRecord")
+    public R saveMemberGiftRecord(@RequestBody MemberGiftRecord memberGiftRecord) {
+        memberGiftRecordService.save(memberGiftRecord);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppCouponController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppCouponController.java
index bb0db64..270e667 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppCouponController.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppCouponController.java
@@ -1,25 +1,34 @@
 package com.ruoyi.member.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.core.utils.StringUtils;
 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.dto.AppMemberCouponPageDto;
+import com.ruoyi.member.domain.pojo.coupon.Coupon;
 import com.ruoyi.member.domain.vo.AppGetAbleCouponPageVo;
 import com.ruoyi.member.domain.vo.AppMemberCouponPageVo;
+import com.ruoyi.member.domain.vo.CouponInfoVo;
 import com.ruoyi.member.service.coupon.CouponService;
 import com.ruoyi.member.service.member.MemberCouponService;
 import com.ruoyi.member.service.member.MemberService;
 import com.ruoyi.system.api.domain.dto.AppBaseGetDto;
 import com.ruoyi.system.api.domain.dto.AppPageDto;
+import com.ruoyi.system.api.domain.poji.goods.Goods;
 import com.ruoyi.system.api.domain.poji.member.Member;
+import com.ruoyi.system.api.domain.poji.member.MemberCoupon;
+import com.ruoyi.system.api.service.RemoteGoodsService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
 import java.util.List;
 
 /**
@@ -33,17 +42,24 @@
 @RestController
 @RequestMapping("/app/coupon")
 public class AppCouponController {
-
-
+    
+    
     @Resource
     private CouponService couponService;
-
+    
     @Resource
     private MemberService memberService;
-
+    
     @Resource
     private MemberCouponService memberCouponService;
-
+    
+    @Resource
+    private RemoteGoodsService remoteGoodsService;
+    
+    @Resource
+    private LotteryEventClient lotteryEventClient;
+    
+    
     @RequestMapping(value = "/pageAppUserGetAbleCoupon", method = RequestMethod.POST)
     @ApiOperation(value = "用户分页获取可领取优惠券列表")
     public R<Page<AppGetAbleCouponPageVo>> pagePlatformMerCoupon(@RequestBody AppPageDto appPageDto) {
@@ -53,7 +69,7 @@
         Page<AppGetAbleCouponPageVo> page = new Page<>();
         page.setSize(appPageDto.getPageSize());
         page.setCurrent(appPageDto.getPageNum());
-        List<AppGetAbleCouponPageVo> unGetCouponPageVoList = couponService.pageAppUserGetAbleCoupon(page,appPageDto,member);
+        List<AppGetAbleCouponPageVo> unGetCouponPageVoList = couponService.pageAppUserGetAbleCoupon(page, appPageDto, member);
         return R.ok(page.setRecords(unGetCouponPageVoList));
     }
 
@@ -77,7 +93,66 @@
         Page<AppMemberCouponPageVo> page = new Page<>();
         page.setSize(appMemberCouponPageDto.getPageSize());
         page.setCurrent(appMemberCouponPageDto.getPageNum());
-        List<AppMemberCouponPageVo> memberCouponPageVoList = memberCouponService.pageAppUserGetCoupon(page,appMemberCouponPageDto, member);
+        List<AppMemberCouponPageVo> memberCouponPageVoList = memberCouponService.pageAppUserGetCoupon(page, appMemberCouponPageDto, member);
         return R.ok(page.setRecords(memberCouponPageVoList));
     }
+    
+    @ResponseBody
+    @PostMapping("/getCouponInfo/{couponId}")
+    @ApiOperation(value = "获取优惠券详情【2.0】", tags = "领券中心")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "优惠券id", required = true, dataType = "String", paramType = "path")
+    })
+    public R<CouponInfoVo> getCouponInfo(@PathVariable("couponId") String couponId) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Coupon coupon = couponService.getById(couponId);
+        CouponInfoVo vo = new CouponInfoVo();
+        vo.setId(coupon.getCouponId());
+        vo.setName(coupon.getCouponName());
+        vo.setType(coupon.getCouponType());
+        vo.setMoneyThreshold(coupon.getMoneyThreshold());
+        vo.setDiscountPercent(coupon.getDiscountPercent());
+        vo.setDiscountMoney(coupon.getDiscountMoney());
+        vo.setValidType(coupon.getValidTimeType());
+        vo.setValidDays(coupon.getValidDay());
+        vo.setValidStartTime(sdf.format(coupon.getValidStartTime()));
+        vo.setValidEndTime(sdf.format(coupon.getValidEndTime()));
+        vo.setPropagandaPoster(coupon.getPropagandaPoster());
+        vo.setUseGoods("");
+        //构建特定商品数据
+        if (StringUtils.isNotEmpty(coupon.getRelGoodsIds())) {
+            String relGoodsIds = coupon.getRelGoodsIds();
+            List<Goods> data = remoteGoodsService.listGoodsByGoodsId(relGoodsIds).getData();
+            StringBuilder sb = new StringBuilder();
+            for (Goods goods : data) {
+                sb.append(goods.getGoodsName()).append(",");
+            }
+            vo.setUseGoods(sb.substring(0, sb.length() - 1));
+        }
+        vo.setLaveNum(coupon.getSendLimitFlag());
+        vo.setReceiveNum(coupon.getSendLimitNumber());
+        int count = memberCouponService.count(new QueryWrapper<MemberCoupon>().eq("coupon_id", couponId).eq("del_flag", 0));
+        vo.setLaveNum(coupon.getSendLimitNumber() - count);
+        MemberCoupon one = memberCouponService.getOne(new QueryWrapper<MemberCoupon>().eq("coupon_id", couponId).eq("user_id", SecurityUtils.getUserId()));
+        if (one != null) {
+            vo.setStatus(one.getCouponStatus());
+        }
+        return R.ok(vo);
+    }
+    
+    
+    @ResponseBody
+    @PostMapping("/shareCoupon/{couponId}")
+    @ApiOperation(value = "分享优惠券【2.0】", tags = "领券中心")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "优惠券id", required = true, dataType = "String", paramType = "path")
+    })
+    public R<Boolean> shareCoupon(@PathVariable("couponId") String couponId) {
+        //检测是否可以抽奖
+        List<LotteryEvent> data = lotteryEventClient.getLotteryEventList(3).getData();
+        if (data.size() > 0) {
+            return R.ok(true);
+        }
+        return R.ok(false);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppMemberController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppMemberController.java
index 1533e98..51cd570 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppMemberController.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppMemberController.java
@@ -158,7 +158,7 @@
     }
 
     @RequestMapping(value = "/pageAppMemberPrize", method = RequestMethod.POST)
-    @ApiOperation(value = "分页获取用户奖品列表")
+    @ApiOperation(value = "分页获取用户奖品列表【2.0】")
     public R<Page<AppMemberPrizePageVo>> pageAppMemberPrize(@RequestBody AppPageDto appPageDto) {
         Long userId = SecurityUtils.getUserId();
         appPageDto.setUserId(userId);
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java
index f2c2a80..238a73e 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java
@@ -543,6 +543,7 @@
                         memberGiftRecord.setDelFlag(0);
                         memberGiftRecord.setVerifyStatus(1);
                         memberGiftRecord.setGiftFrom(1);
+                        memberGiftRecord.setPrizeFrom(1);
                         memberGiftRecord.setGiftYear(currentYear);
                         memberGiftRecord.setCreateTime(new Date());
                         memberGiftRecord.setUserId(userId);
@@ -622,6 +623,7 @@
                                 memberGiftRecord.setDelFlag(0);
                                 memberGiftRecord.setVerifyStatus(1);
                                 memberGiftRecord.setGiftFrom(2);
+                                memberGiftRecord.setPrizeFrom(1);
                                 memberGiftRecord.setShopId(shopId);
                                 memberGiftRecord.setGiftYear(currentYear);
                                 memberGiftRecord.setCreateTime(new Date());
@@ -682,23 +684,23 @@
         appBirthdayCardVo.setBirthdayGiftVoList(birthdayGiftVoList);
         return appBirthdayCardVo;
     }
-
+    
     /**
-     * @description
-     * @author  jqs
-     * @date    2023/7/11 18:02
      * @param page
      * @param userId
-     * @return  List<AppMemberPrizePageVo>
+     * @return List<AppMemberPrizePageVo>
+     * @description
+     * @author jqs
+     * @date 2023/7/11 18:02
      */
     @Override
-    public List<AppMemberPrizePageVo> pageAppMemberPrize(Page page, Long userId){
+    public List<AppMemberPrizePageVo> pageAppMemberPrize(Page page, Long userId) {
         List<AppMemberPrizePageVo> memberPrizePageVoList = birthdayCardMapper.pageAppMemberPrize(page, userId);
-        if(memberPrizePageVoList!=null&&!memberPrizePageVoList.isEmpty()){
+        if (memberPrizePageVoList != null && !memberPrizePageVoList.isEmpty()) {
             HashSet<Long> shopIdSet = new HashSet<>();
-            for(AppMemberPrizePageVo appMemberPrizePageVo : memberPrizePageVoList){
-                appMemberPrizePageVo.setVerifyCode("3-"+appMemberPrizePageVo.getPrizeId());
-                if(appMemberPrizePageVo.getShopId()!=null){
+            for (AppMemberPrizePageVo appMemberPrizePageVo : memberPrizePageVoList) {
+                appMemberPrizePageVo.setVerifyCode("3-" + appMemberPrizePageVo.getPrizeId());
+                if (appMemberPrizePageVo.getShopId() != null) {
                     shopIdSet.add(appMemberPrizePageVo.getShopId());
                 }
             }
@@ -708,8 +710,8 @@
             List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData();
             Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream()
                     .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity()));
-            for(AppMemberPrizePageVo appMemberPrizePageVo : memberPrizePageVoList){
-                if(appMemberPrizePageVo.getShopId()!=null){
+            for (AppMemberPrizePageVo appMemberPrizePageVo : memberPrizePageVoList) {
+                if (appMemberPrizePageVo.getShopId() != null) {
                     appMemberPrizePageVo.setVerifyShopName(shopMap.get(appMemberPrizePageVo.getShopId()).getShopName());
                 }
             }
diff --git a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/birthday/BirthdayCardMapper.xml b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/birthday/BirthdayCardMapper.xml
index 0e02a5e..93a003c 100644
--- a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/birthday/BirthdayCardMapper.xml
+++ b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/birthday/BirthdayCardMapper.xml
@@ -17,21 +17,25 @@
     </select>
 
     <select id="pageAppMemberPrize" resultType="com.ruoyi.member.domain.vo.AppMemberPrizePageVo">
-        SELECT
-        prize_id prizeId,
-        CASE gift_type
-            WHEN 1 THEN CONCAT(coupon_name,"优惠券")
-            WHEN 2 THEN CONCAT(goods_name,"商品")
-            WHEN 4 THEN CONCAT(gift_name,"实物")
-            WHEN 3 THEN CONCAT("现金",money,"元")
-            END prizeName,
-        "生日卡" prizeFrom,
-        verify_status verifyStatus,
-        create_time createTime,
-        verify_time verifyTime,
-        shop_id shopId
+        SELECT prize_id      prizeId,
+               CASE gift_type
+                   WHEN 1 THEN CONCAT(coupon_name, "优惠券")
+                   WHEN 2 THEN CONCAT(goods_name, "商品")
+                   WHEN 4 THEN CONCAT(gift_name, "实物")
+                   WHEN 3 THEN CONCAT("现金", money, "元")
+                   WHEN 5 THEN "积分"
+                   END       prizeName,
+               CASE prize_from
+                   WHEN 1 THEN "生日卡"
+                   ELSE "抽奖"
+                   END       prizeFrom,
+               verify_status verifyStatus,
+               create_time   createTime,
+               verify_time   verifyTime,
+               shop_id       shopId
         FROM t_member_gift_record
-        WHERE del_flag = 0 AND user_id = #{userId}
+        WHERE del_flag = 0
+          AND user_id = #{userId}
         ORDER BY verify_status ASC
     </select>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java
index fda482f..7f472e7 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java
@@ -56,7 +56,7 @@
     private String outTradeNo;
 
     /**
-     * 订单来源1.商城2.秒杀活动3.线下创建
+     * 订单来源1.商城2.秒杀活动3.线下创建4.抽奖
      */
     @TableField("order_from")
     private Integer orderFrom;
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 bba0315..1ab53ad 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
@@ -2413,20 +2413,20 @@
         Long shopId = shopRelUserVo.getShopId();
         Shop shop = remoteShopService.getShop(shopId).getData();
         //平台奖品判断
-        if (memberGiftRecord.getGiftFrom() == 1) {
+        if (memberGiftRecord.getGiftFrom() == 1 && memberGiftRecord.getPrizeFrom() == 1) {
             BirthdayCard birthdayCard = remoteMemberService.getBirthdayCard().getData();
             //判断生日活动状态
-            if(birthdayCard!=null&&birthdayCard.getCardStatus()==1){
+            if (birthdayCard != null && birthdayCard.getCardStatus() == 1) {
                 shop = remoteShopService.getShop(shopId).getData();
                 //判断指定区域全部店铺
-                if(birthdayCard.getAreaFlag()==2&&birthdayCard.getShopFlag()==1&&!StringUtils.checkString(birthdayCard.getDesignatedArea(),shop.getShopCityCode())){
+                if (birthdayCard.getAreaFlag() == 2 && birthdayCard.getShopFlag() == 1 && !StringUtils.checkString(birthdayCard.getDesignatedArea(), shop.getShopCityCode())) {
                     throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
                 }
                 //判断指定店铺
-                if(birthdayCard.getShopFlag()==2&&!StringUtils.checkString(birthdayCard.getApplicableShop(),shopId.toString())){
+                if (birthdayCard.getShopFlag() == 2 && !StringUtils.checkString(birthdayCard.getApplicableShop(), shopId.toString())) {
                     throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
                 }
-            }else{
+            } else {
                 throw new ServiceException(AppErrorConstant.BIRTHDAY_CARD_ERROR);
             }
         }
@@ -2435,29 +2435,35 @@
             throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR);
         }
         Member member = remoteMemberService.getMember(memberGiftRecord.getUserId()).getData();
-
+    
         merVerifyAwardVo.setUserName(member.getRealName());
         merVerifyAwardVo.setUserMobile(member.getMobile());
-        if (memberGiftRecord.getGiftFrom() == 1) {
-            merVerifyAwardVo.setGiftFrom("平台生日卡");
+        if (memberGiftRecord.getPrizeFrom() == 1) {
+            if (memberGiftRecord.getGiftFrom() == 1) {
+                merVerifyAwardVo.setGiftFrom("平台生日卡");
+            } else {
+                merVerifyAwardVo.setGiftFrom("商户生日卡");
+            }
         } else {
-            merVerifyAwardVo.setGiftFrom("商户生日卡");
+            merVerifyAwardVo.setGiftFrom("抽奖");
         }
         merVerifyAwardVo.setGiftType(memberGiftRecord.getGiftType());
         List<BirthdayGiftSendDto> giftSendDtoList = new ArrayList<>();
         BirthdayGiftSendDto birthdayGiftSendDto = new BirthdayGiftSendDto();
         switch (memberGiftRecord.getGiftType()) {
             case 1:
-                merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
-                merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
-                birthdayGiftSendDto.setUserId(memberGiftRecord.getUserId());
-                birthdayGiftSendDto.setGiftType(memberGiftRecord.getGiftType());
-                birthdayGiftSendDto.setGiftFrom(memberGiftRecord.getGiftFrom());
-                birthdayGiftSendDto.setShopId(memberGiftRecord.getShopId());
-                birthdayGiftSendDto.setCouponId(memberGiftRecord.getCouponId());
-                birthdayGiftSendDto.setCouponNumber(memberGiftRecord.getCouponNumber());
-                giftSendDtoList.add(birthdayGiftSendDto);
-                remoteCouponService.sendCouponGift(giftSendDtoList);
+                if (memberGiftRecord.getPrizeFrom() == 1) {
+                    merVerifyAwardVo.setGiftName(memberGiftRecord.getCouponName());
+                    merVerifyAwardVo.setGiftNumber(Double.valueOf(memberGiftRecord.getCouponNumber()));
+                    birthdayGiftSendDto.setUserId(memberGiftRecord.getUserId());
+                    birthdayGiftSendDto.setGiftType(memberGiftRecord.getGiftType());
+                    birthdayGiftSendDto.setGiftFrom(memberGiftRecord.getGiftFrom());
+                    birthdayGiftSendDto.setShopId(memberGiftRecord.getShopId());
+                    birthdayGiftSendDto.setCouponId(memberGiftRecord.getCouponId());
+                    birthdayGiftSendDto.setCouponNumber(memberGiftRecord.getCouponNumber());
+                    giftSendDtoList.add(birthdayGiftSendDto);
+                    remoteCouponService.sendCouponGift(giftSendDtoList);
+                }
                 break;
             case 2:
                 Goods goods = remoteGoodsService.getGoods(memberGiftRecord.getGoodsId()).getData();
@@ -2480,10 +2486,16 @@
                 birthdayGiftSendDto.setGoodsNumber(memberGiftRecord.getGoodsNumber());
                 giftSendDtoList.add(birthdayGiftSendDto);
                 consumerGoodsService.sendGoodsGift(giftSendDtoList);
+                //抽奖奖品中的平台商品需要生成订单数据
+                if (memberGiftRecord.getPrizeFrom() == 2) {
+                    addOrder(memberGiftRecord.getShopId(), memberGiftRecord.getUserId(), goods, memberGiftRecord.getGoodsNumber(), memberGiftRecord.getGiftId());
+                }
                 break;
             case 3:
-                merVerifyAwardVo.setGiftName("现金");
-                merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
+                if (memberGiftRecord.getPrizeFrom() == 1) {
+                    merVerifyAwardVo.setGiftName("现金");
+                    merVerifyAwardVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
+                }
                 break;
             case 4:
                 merVerifyAwardVo.setGiftName(memberGiftRecord.getGiftName());
@@ -2511,8 +2523,65 @@
         merVerifyAwardVo.setVerifyStatus(2);
         return merVerifyAwardVo;
     }
-
-
+    
+    
+    /**
+     * 核销抽奖的平台商品生成订单
+     *
+     * @param shopId
+     * @param userId
+     * @param goods
+     * @param goodsNum
+     */
+    public void addOrder(Long shopId, Long userId, Goods goods, Integer goodsNum, String giftId) {
+        Order order = new Order();
+        order.setOrderId(IdUtils.simpleUUID());
+        order.setDelFlag(0);
+        order.setOrderStatus(3);
+        order.setOrderNo(CodeFactoryUtil.getShopOrderNo());
+        order.setOrderFrom(4);
+        order.setShopId(shopId);
+        order.setUserId(userId);
+        order.setOrderMoney(BigDecimal.ZERO);
+        order.setCouponMoney(BigDecimal.ZERO);
+        order.setDiscountMoney(BigDecimal.ZERO);
+        order.setReceivableMoney(BigDecimal.ZERO);
+        order.setPayType(1);
+        order.setPayMoney(BigDecimal.ZERO);
+        order.setOrderRemark("抽奖订单");
+        order.setCreateTime(new Date());
+        order.setPayTime(new Date());
+        order.setUseTime(new Date());
+        order.setUseUserId(userId);
+        order.setGoodsNum(goodsNum);
+        order.setReceivableDeposit(BigDecimal.ZERO);
+        order.setCloseFlag(1);
+        order.setActivityId(giftId);
+        this.save(order);
+        OrderGoods orderGoods = new OrderGoods();
+        orderGoods.setOrderGoodsId(IdUtils.simpleUUID());
+        orderGoods.setDelFlag(0);
+        orderGoods.setOrderId(order.getOrderId());
+        orderGoods.setGoodsId(goods.getGoodsId());
+        orderGoods.setBuyNum(goodsNum);
+        orderGoods.setGoodsPrice(goods.getSalesPrice());
+        orderGoods.setGoodsDeposit(goods.getSubscription());
+        orderGoods.setGoodsTotalMoney(goods.getSalesPrice().multiply(new BigDecimal(goodsNum)));
+        orderGoods.setGoodsReceivableMoney(BigDecimal.ZERO);
+        orderGoods.setCycleNumFlag(goods.getCycleNumFlag());
+        orderGoods.setServiceNum(goods.getServiceNum());
+        orderGoods.setGoodsType(goods.getGoodsType());
+        orderGoods.setGoodsName(goods.getGoodsName());
+        GoodsFile goodsFile = remoteGoodsService.getGoodsFile(goods.getGoodsId()).getData();
+        if (null != goodsFile) {
+            orderGoods.setGoodsPicture(goodsFile.getFileUrl());
+        }
+        orderGoods.setGoodsIntroduction(goods.getGoodsIntroduction());
+        orderGoods.setGoodsTag(goods.getGoodsTags());
+        orderGoodsService.save(orderGoods);
+    }
+    
+    
     /**
      * 收银未结清订单列表
      *
@@ -2529,14 +2598,14 @@
                 if (merMemberNoClearOrderVo.getUnPaidMoney() == null) {
                     merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
                 }
-                if(merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig)<0){
+                if (merMemberNoClearOrderVo.getUnPaidMoney().compareTo(zeroBig) < 0) {
                     merMemberNoClearOrderVo.setUnPaidMoney(zeroBig);
                 }
             }
         }
         return merMemberNoClearOrderVoList;
     }
-
+    
     /**
      * 结清订单
      *
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 e73b8fb..a55bab3 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
@@ -3,11 +3,14 @@
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
 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.dto.MyAppointmentListDto;
 import com.ruoyi.shop.domain.vo.AppNearbyShopVo;
 import com.ruoyi.shop.domain.vo.AppShopInfoVo;
+import com.ruoyi.shop.domain.vo.MyAppointmentListVo;
 import com.ruoyi.shop.service.shop.ShopAppointableTimeService;
 import com.ruoyi.shop.service.shop.ShopNonAppointableTimeService;
 import com.ruoyi.shop.service.shop.ShopService;
@@ -21,10 +24,7 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.log4j.Log4j2;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
@@ -104,4 +104,31 @@
         shopAppointableTimeService.save(one);
         return R.ok();
     }
+    
+    @RequestMapping(value = "/getMyAppointmentList", method = RequestMethod.POST)
+    @ApiOperation(value = "获取我的预约列表【2.0】")
+    public R<Page<MyAppointmentListVo>> getMyAppointmentList(@RequestBody MyAppointmentListDto dto) {
+        Page<MyAppointmentListVo> page = new Page<>();
+        page.setSize(dto.getPageSize());
+        page.setCurrent(dto.getPageNum());
+        List<MyAppointmentListVo> myAppointmentListVos = shopAppointableTimeService.pageMyAppointmentList(page, dto);
+        return R.ok(page.setRecords(myAppointmentListVos));
+    }
+    
+    
+    @RequestMapping(value = "/cancelAppointmentTime/{id}", method = RequestMethod.POST)
+    @ApiOperation(value = "取消预约【2.0】")
+    public R cancelAppointmentTime(@PathVariable("id") String id) {
+        Long userId = SecurityUtils.getUserId();
+        ShopAppointableTime one = shopAppointableTimeService.getById(id);
+        if (null == one) {
+            return R.fail("预约不存在");
+        }
+        if (!one.getUserId().equals(userId)) {
+            return R.fail("不能取消别人的预约");
+        }
+        one.setStatus(0);
+        shopAppointableTimeService.updateById(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
index 3cfdc6e..36a7535 100644
--- 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
@@ -1,11 +1,27 @@
 package com.ruoyi.shop.mapper.shop;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.ruoyi.shop.domain.vo.MyAppointmentListVo;
 import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @author zhibing.pu
  * @Date 2025/5/26 15:13
  */
 public interface ShopAppointableTimeMapper extends BaseMapper<ShopAppointableTime> {
+	
+	
+	/**
+	 * 分页查询我的预约列表
+	 *
+	 * @param page
+	 * @param userId
+	 * @param status
+	 * @return
+	 */
+	List<MyAppointmentListVo> pageMyAppointmentList(Page<MyAppointmentListVo> page, @Param("userId") Long userId, @Param("status") Integer status);
 }
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
index 00ea027..2cf08f1 100644
--- 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
@@ -1,13 +1,35 @@
 package com.ruoyi.shop.service.impl.shop;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.shop.domain.dto.MyAppointmentListDto;
+import com.ruoyi.shop.domain.vo.MyAppointmentListVo;
 import com.ruoyi.shop.mapper.shop.ShopAppointableTimeMapper;
 import com.ruoyi.shop.service.shop.ShopAppointableTimeService;
 import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * @author zhibing.pu
  * @Date 2025/5/26 15:15
  */
+@Service
 public class ShopAppointableTimeServiceImpl extends ServiceImpl<ShopAppointableTimeMapper, ShopAppointableTime> implements ShopAppointableTimeService {
+	
+	
+	/**
+	 * 分页查询我的预约
+	 *
+	 * @param page
+	 * @param dto
+	 * @return
+	 */
+	@Override
+	public List<MyAppointmentListVo> pageMyAppointmentList(Page<MyAppointmentListVo> page, MyAppointmentListDto dto) {
+		Long userId = SecurityUtils.getUserId();
+		return this.baseMapper.pageMyAppointmentList(page, userId, dto.getStatus());
+	}
 }
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
index 052c43d..76476e1 100644
--- 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
@@ -1,11 +1,26 @@
 package com.ruoyi.shop.service.shop;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.ruoyi.shop.domain.dto.MyAppointmentListDto;
+import com.ruoyi.shop.domain.vo.MyAppointmentListVo;
 import com.ruoyi.system.api.domain.poji.shop.ShopAppointableTime;
+
+import java.util.List;
 
 /**
  * @author zhibing.pu
  * @Date 2025/5/26 15:14
  */
 public interface ShopAppointableTimeService extends IService<ShopAppointableTime> {
+	
+	
+	/**
+	 * 获取用户预约列表
+	 *
+	 * @param page
+	 * @param dto
+	 * @return
+	 */
+	List<MyAppointmentListVo> pageMyAppointmentList(Page<MyAppointmentListVo> page, MyAppointmentListDto dto);
 }

--
Gitblit v1.7.1