Pu Zhibing
4 天以前 d6a0c57043e8cc20694a3c678bf8e3a8f28f6499
新增加用户端接口
21个文件已修改
985 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEvent.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/UserLotteryEventQuestions.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberGiftRecord.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppLotteryEventController.java 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/LotteryEventInfoVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/LotteryEventVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/UserLotteryEventVo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java 303 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppCouponController.java 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppMemberController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/resources/mapper/birthday/BirthdayCardMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java 119 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/miniapp/AppHomeController.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopAppointableTimeMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopAppointableTimeServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopAppointableTimeService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
    
}
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;
}
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")
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());
            }
        };
    }
}
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);
}
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);
    }
}
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;
}
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;
}
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;
}
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) {
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();
    }
}
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);
    }
}
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);
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());
                }
            }
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>
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;
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;
    }
    /**
     * 结清订单
     *
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();
    }
}
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);
}
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());
    }
}
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);
}