| | |
| | | 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; |
| | |
| | | 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 |
| | |
| | | @Resource |
| | | private IUserLotteryEventQuestionsService userLotteryEventQuestionsService; |
| | | |
| | | @Resource |
| | | private IUserLotteryEventQuestionsAnswersService userLotteryEventQuestionsAnswersService; |
| | | |
| | | @Resource |
| | | private ILotteryEventQuestionsService lotteryEventServiceQuestionsService; |
| | | |
| | | @Resource |
| | | private ILotteryEventQuestionsAnswersService lotteryEventQuestionsAnswersService; |
| | | |
| | | |
| | | @ResponseBody |
| | |
| | | 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); |
| | | } |
| | | } |