From a9bf1fc6ffb80c2de56e1730595b3abde4910484 Mon Sep 17 00:00:00 2001 From: hjl <1657978663@qq.com> Date: 星期五, 21 六月 2024 17:17:55 +0800 Subject: [PATCH] fix: 学习端bug --- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java | 51 +++++++++++++++++++++++++ ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java | 22 ++++++---- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java | 35 ++++++++++++----- ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java | 8 ++-- 4 files changed, 92 insertions(+), 24 deletions(-) diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java index ca60bf3..cda7ef4 100644 --- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java +++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java @@ -68,7 +68,10 @@ String key = String.format(RedisConstants.GOOD_STOCK, goods.getId()); List<TOrder> orderList = orderService.lambdaQuery().eq(TOrder::getGoodsId, goodId) .eq(TOrder::getDisabled, 0).list(); - int sum = orderList.stream().map(TOrder::getCount).mapToInt(Integer::intValue).sum(); + int sum = 0; + if (!orderList.isEmpty()) { + sum = orderList.stream().map(TOrder::getCount).mapToInt(Integer::intValue).sum(); + } // 计算商品剩余可兑换数量 int number = goods.getTotal() - sum; if (number <= 0) { @@ -127,9 +130,6 @@ } // 兑换成功,生成订单信息、生成积分明细(积分明细需要远程调用rouyi-study服务) boolean result = exchangeGood(goodExchange, recipient, number, goodId, needIntegral); - // 扣除库存 - result = result && this.lambdaUpdate().set(TGoods::getTotal, good.getTotal() - number) - .eq(TGoods::getId, good.getId()).update(); if (!result) { semaphore.release(number); return R.exchangeError("商品兑换失败!"); diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java index b6fc43c..a5ca771 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java +++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java @@ -809,7 +809,7 @@ data.setIsDelete(0); result = result && userPresentRecordService.save(data); } else { - if (System.currentTimeMillis() - record.getPresentTime().getTime() >= 10 * 60) { + if (System.currentTimeMillis() - record.getPresentTime().getTime() >= 10 * 60 * 1000) { // 赠送积分 result = userService.lambdaUpdate() .set(TUser::getIntegral, user.getIntegral() + Integer.parseInt(integral)) @@ -889,6 +889,7 @@ Integer quarter = exitLearn.getQuarter(); Integer week = exitLearn.getWeek(); Integer day = exitLearn.getDay(); + int schedule = exitLearn.getSchedule() == null ? 0 : exitLearn.getSchedule(); if (userStudy.getWeek().equals(exitLearn.getWeek()) && userStudy.getDay().equals(exitLearn.getDay())) { // 计算完成率 Integer type = exitLearn.getType(); @@ -909,7 +910,7 @@ List<TStudyLook> lookList = studyLookService.pictureSelectVoice(quarter, week, day); if (!lookList.isEmpty()) { int item = lookList.size(); - int i = (int) ((double) (exitLearn.getSchedule() / item)) * 100; + int i = (int) ((double) (schedule / item)) * 100; if (i > userStudy.getLook()) { userStudy.setLook(100 - i); } @@ -919,7 +920,7 @@ List<TStudyInduction> inductionList = studyInductionService.induceExclude(quarter, week, day); if (!inductionList.isEmpty()) { int item = inductionList.size(); - int i = (int) ((double) (exitLearn.getSchedule() / item)) * 100; + int i = (int) ((double) (schedule / item)) * 100; if (i > userStudy.getInduction()) { userStudy.setInduction(100 - i); } @@ -928,7 +929,7 @@ // 有问有答 List<TStudyAnswer> answerList = studyAnswerService.questionsAndAnswers(quarter, week, day); if (answerList.size() % Constants.TWO == Constants.ZERO) { - int i = (int) ((double) (exitLearn.getSchedule() / (answerList.size() / 2))) * 100; + int i = (int) ((double) (schedule / (answerList.size() / 2))) * 100; if (i > userStudy.getAnswer()) { userStudy.setAnswer(100 - i); } @@ -937,7 +938,7 @@ // 音图相配 List<TStudyPair> pairList = studyPairService.pictureMateVoice(quarter, week, day); int item = pairList.size(); - int i = (int) ((double) (exitLearn.getSchedule() / item)) * 100; + int i = (int) ((double) (schedule / item)) * 100; if (i > userStudy.getPair()) { userStudy.setPair(100 - i); } @@ -1162,6 +1163,8 @@ record.setQuarter(completeStudy.getQuarter()); record.setWeek(completeStudy.getWeek()); record.setDay(completeStudy.getDay()); + // 学习类型 + record.setStudyType(completeStudy.getType()); record.setObtainedIntegral(integral); record.setType(Constants.ZERO); update = update && studyRecordService.save(record); @@ -1354,11 +1357,12 @@ .eq(TUserStudy::getDisabled, 0).one(); if (null == userStudy) { userStudy = createUserStudy(userid); - userStudy.setTotalStudy(userStudy.getTotalStudy() + completeStudy.getUseTime()); - userStudy.setTodayStudy(userStudy.getTodayStudy() + completeStudy.getUseTime()); - userStudy.setWeekStudy(userStudy.getWeekStudy() + completeStudy.getUseTime()); - userStudy.setMonthStudy(userStudy.getMonthStudy() + completeStudy.getUseTime()); } + // 学习时长 + userStudy.setTotalStudy(userStudy.getTotalStudy() + completeStudy.getUseTime()); + userStudy.setTodayStudy(userStudy.getTodayStudy() + completeStudy.getUseTime()); + userStudy.setWeekStudy(userStudy.getWeekStudy() + completeStudy.getUseTime()); + userStudy.setMonthStudy(userStudy.getMonthStudy() + completeStudy.getUseTime()); boolean update = userStudyService.updateById(userStudy); // 超级记忆逻辑 if (Constants.MEMORY.equals(completeStudy.getGameName())) { diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java index a0c4e65..e9719c5 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java +++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java @@ -416,12 +416,39 @@ @Override public int computeSchedule(TUserStudy result, Integer week) { + List<TStudy> studyList = this.lambdaQuery().eq(TStudy::getDisabled, 0) + .eq(TStudy::getType, 1) + .orderByAsc(TStudy::getWeek).list(); // 基础学习进度 Integer day = result.getDay(); + Integer studyWeek = result.getWeek(); + Map<Integer, List<TStudy>> studyMap = new HashMap<>(8); + for (TStudy study : studyList) { + Integer quarter = study.getQuarter(); + List<TStudy> itemList = studyMap.get(quarter); + if (null == itemList) { + itemList = new ArrayList<>(); + } + itemList.add(study); + studyMap.put(quarter, itemList); + } + // 临时判断参数 + boolean itemBool = false; + for (Map.Entry<Integer, List<TStudy>> map : studyMap.entrySet()) { + List<TStudy> list = map.getValue(); + List<Integer> collect = list.stream().map(TStudy::getWeek).collect(Collectors.toList()); + if (collect.contains(studyWeek)) { + int i = collect.indexOf(studyWeek); + if (collect.contains(week)) { + int x = collect.indexOf(week); + itemBool = i > x; + } + } + } // 默认进度为 0 int defaultSchedule; // week以超过当前week,进度为 100% - if (result.getWeek() > week) { + if (itemBool) { defaultSchedule = 100; } else { // 根据day初始化学习进度 @@ -438,6 +465,28 @@ } else { defaultSchedule = 0; } + // 根据五种学习计算进度 + Integer listen = result.getListen(); + if (!Constants.BURDEN_ONE.equals(listen)) { + defaultSchedule += (int)(((double)listen / 100) * 4); + } + Integer look = result.getLook(); + if (!Constants.BURDEN_ONE.equals(look)) { + defaultSchedule += (int)(((double)look / 100) * 4); + } + Integer induction = result.getInduction(); + if (!Constants.BURDEN_ONE.equals(induction)) { + defaultSchedule += (int)(((double)induction / 100) * 4); + } + Integer answer = result.getAnswer(); + if (!Constants.BURDEN_ONE.equals(answer)) { + defaultSchedule += (int)(((double)answer / 100) * 4); + } + Integer pair = result.getPair(); + if (!Constants.BURDEN_ONE.equals(pair)) { + defaultSchedule += (int)(((double)pair / 100) * 4); + } + } return defaultSchedule; } diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java index 0170754..0570cab 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java +++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java @@ -50,8 +50,6 @@ // 游戏难度 GAME_DIFFICULTY_MAP.put(Constants.ZERO, Constants.ONE); GAME_DIFFICULTY_MAP.put(Constants.ONE, Constants.TWO); - GAME_DIFFICULTY_MAP.put(Constants.TWO, Constants.ZERO); - } @Override @@ -115,12 +113,20 @@ userStudyRecord.setAnswer(Constants.ONE_HUNDRED); userStudyRecord.setPair(Constants.BURDEN_ONE); } else if (Constants.FIVE.equals(type)) { - userStudyRecord.setPair(Constants.ONE_HUNDRED); - // type为5并且day为5应该进入游戏日 Integer nextDay = DAY_MAP.get(String.valueOf(userStudyRecord.getDay())); + // type为5并且day为5应该进入游戏日 + if (Constants.FIVE.equals(completeStudy.getDay())) { + userStudyRecord.setPair(Constants.ONE_HUNDRED); + // 游戏难度初始化 0(入门难度) + userStudyRecord.setGameDifficulty(Constants.ZERO); + } else { + userStudyRecord.setListen(Constants.BURDEN_ONE); + userStudyRecord.setLook(Constants.BURDEN_ONE); + userStudyRecord.setInduction(Constants.BURDEN_ONE); + userStudyRecord.setAnswer(Constants.BURDEN_ONE); + userStudyRecord.setPair(Constants.BURDEN_ONE); + } userStudyRecord.setDay(nextDay); - // 游戏难度初始化 0(入门难度) - userStudyRecord.setGameDifficulty(Constants.ZERO); } } // 更新学习时长 @@ -160,13 +166,13 @@ for (int i = 0; i < studyList1.size(); i++) { TStudy tStudy = studyList1.get(i); if (tStudy.getWeek().equals(userStudy.getWeek())) { - // 是否为当前季度最后一周目 - if (i + 1 == studyList1.size() - 1) { + if (studyList1.size() == 1 || i + 1 == studyList1.size() - 1) { + // 是否为当前季度最后一周目 List<TStudy> studyList2 = studyMap.get(quarterItem + 1); // 下一季度数据为空 if (null != studyList2 && !studyList2.isEmpty()) { TStudy tStudy1 = studyList2.get(Constants.ZERO); - tStudy.setWeek(tStudy1.getWeek()); + userStudy.setWeek(tStudy1.getWeek()); } } else { TStudy tStudy1 = studyList1.get(i + 1); @@ -174,6 +180,13 @@ } } } + userStudy.setDay(DAY_MAP.get(String.valueOf(userStudy.getDay()))); + userStudy.setLook(Constants.BURDEN_ONE); + userStudy.setPair(Constants.BURDEN_ONE); + userStudy.setInduction(Constants.BURDEN_ONE); + userStudy.setListen(Constants.BURDEN_ONE); + userStudy.setAnswer(Constants.BURDEN_ONE); + userStudy.setGameDifficulty(Constants.ZERO); this.updateById(userStudy); } } @@ -186,7 +199,9 @@ // 获取用户超级记忆游戏记录 TUserStudy userStudy = this.lambdaQuery().eq(TUserStudy::getUserId, userid).one(); // 更新游戏难度学习记录 - userStudy.setGameDifficulty(GAME_DIFFICULTY_MAP.get(completeStudy.getDifficulty())); + if (!Constants.TWO.equals(userStudy.getGameDifficulty())) { + userStudy.setGameDifficulty(GAME_DIFFICULTY_MAP.get(completeStudy.getDifficulty())); + } this.updateById(userStudy); } } -- Gitblit v1.7.1