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); }