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