From 0dfecde9ebe89ec797b273823c52e44baf056df6 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期一, 24 六月 2024 09:51:54 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/DolphinEnglish
---
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserPresentRecordService.java | 16 +
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java | 222 +++++++++++--
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStudyService.java | 14
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StudyWeekDTO.java | 6
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserPresentRecordMapper.xml | 4
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserPresentRecord.java | 49 +++
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserPresentRecordServiceImpl.java | 21 +
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java | 7
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserStudyService.java | 8
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java | 79 +++-
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java | 20
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TSubject.java | 5
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java | 23
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java | 36 +
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserStudyRecord.java | 7
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TOrder.java | 28 +
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java | 228 ++++++++++---
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java | 22
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/ExitLearnVO.java | 15
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java | 52 +-
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserPresentRecordMapper.java | 16 +
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/vo/GoodDetailVO.java | 12
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TIntegralRecord.java | 13
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TIntegralRecordMapper.xml | 1
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/config/RedissonConfig.java | 5
25 files changed, 709 insertions(+), 200 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java
index b3e1213..99da36f 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java
@@ -231,6 +231,13 @@
public static final Integer SEVEN = 7;
/**
+ * 数字10
+ */
+ public static final Integer TEN = 10;
+
+
+
+ /**
* -1
*/
public static final Integer BURDEN_ONE = -1;
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
index 661ab20..963d895 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -220,17 +220,17 @@
String userkey = JwtUtils.getUserKeyStudy(token);
user = redisService.getCacheObject(getTokenKeyStudy(userkey));
// 再次判断登录状态是否已过期
- if (null == user) {
- throw new StudyLoginException("登录信息已过期,请重新登录!", 504);
- }
- // 优先判断当前账号是否已在其他设备登录
- if (!user.getIsCanLogin()) {
- throw new StudyLoginException("当前登录账号在其他设备登录!", 505);
- }
- // 再次判断登录状态是否已过期
- if (System.currentTimeMillis() > user.getExpireTime()) {
- throw new StudyLoginException("登录信息已过期,请重新登录!", 504);
- }
+// if (null == user) {
+// throw new StudyLoginException("登录信息已过期,请重新登录!", 504);
+// }
+// // 优先判断当前账号是否已在其他设备登录
+// if (!user.getIsCanLogin()) {
+// throw new StudyLoginException("当前登录账号在其他设备登录!", 505);
+// }
+// // 再次判断登录状态是否已过期
+// if (System.currentTimeMillis() > user.getExpireTime()) {
+// throw new StudyLoginException("登录信息已过期,请重新登录!", 504);
+// }
return user;
}
return user;
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/config/RedissonConfig.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/config/RedissonConfig.java
index c9a8d86..5cd7758 100644
--- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/config/RedissonConfig.java
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/config/RedissonConfig.java
@@ -22,7 +22,10 @@
@Bean
public RedissonClient redissonClient() {
Config config = new Config();
- config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("123456");
+ // 线上redis
+ config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("dolphin123456");
+ // 本地redis
+// config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("123456");
return Redisson.create(config);
}
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java
index 48c5d95..e335244 100644
--- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java
@@ -164,9 +164,9 @@
@PostMapping("/addGoods")
@ApiOperation(value = "添加", tags = {"后台-商品管理"})
public R addGoods(@RequestBody TGoods dto) {
- if (dto.getTotal()!=null){
+ if (dto.getTotal() != null) {
dto.setSurplus(dto.getTotal());
- }else{
+ } else {
dto.setSurplus(0);
}
goodsService.save(dto);
@@ -184,9 +184,9 @@
@PostMapping("/updateGoods")
@ApiOperation(value = "修改", tags = {"后台-商品管理"})
public R updateGoods(@RequestBody TGoods dto) {
- if (dto.getTotal()!=null){
+ if (dto.getTotal() != null) {
dto.setSurplus(dto.getTotal());
- }else{
+ } else {
dto.setSurplus(0);
}
goodsService.updateById(dto);
@@ -647,7 +647,19 @@
number += goods.getBasicCount();
}
number += orderService.getGoodBuyNumber(goods.getId());
- return R.ok(new GoodDetailVO(goods, goodsTypes, number));
+ // 剩余兑换数量
+ Integer residueNumber = null;
+ if (null != goods.getTotal()) {
+ // 计算剩余兑换数量
+ List<TOrder> orderList = orderService.lambdaQuery().eq(TOrder::getGoodsId, goodId)
+ .eq(TOrder::getDisabled, 0).list();
+ Integer item = 0;
+ for (TOrder order : orderList) {
+ item += order.getCount();
+ }
+ residueNumber = goods.getTotal() - item;
+ }
+ return R.ok(new GoodDetailVO(goods, goodsTypes, number, residueNumber));
}
/**
@@ -678,7 +690,19 @@
number += goods.getBasicCount();
}
number += orderService.getGoodBuyNumber(goods.getId());
- return R.ok(new GoodDetailVO(goods, goodsTypes, number));
+ // 剩余兑换数量
+ Integer residueNumber = null;
+ if (null != goods.getTotal()) {
+ // 计算剩余兑换数量
+ List<TOrder> orderList = orderService.lambdaQuery().eq(TOrder::getGoodsId, goodId)
+ .eq(TOrder::getDisabled, 0).list();
+ Integer item = 0;
+ for (TOrder order : orderList) {
+ item += order.getCount();
+ }
+ residueNumber = goods.getTotal() - item;
+ }
+ return R.ok(new GoodDetailVO(goods, goodsTypes, number, residueNumber));
}
/**
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TOrder.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TOrder.java
index 7511431..68bc8c1 100644
--- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TOrder.java
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TOrder.java
@@ -103,6 +103,10 @@
@ApiModelProperty(value = "收货人地址")
private String consigneeAddress;
+ @ApiModelProperty(value = "订单备注")
+ @TableField("remark")
+ private String remark;
+
public Integer getId() {
return id;
@@ -195,17 +199,17 @@
@Override
public String toString() {
return "TOrder{" +
- ", id=" + id +
- ", orderNumber=" + orderNumber +
- ", userId=" + userId +
- ", insertTime=" + insertTime +
- ", goodsId=" + goodsId +
- ", count=" + count +
- ", state=" + state +
- ", express=" + express +
- ", expressNumber=" + expressNumber +
- ", expressTime=" + expressTime +
- ", integral=" + integral +
- "}";
+ ", id=" + id +
+ ", orderNumber=" + orderNumber +
+ ", userId=" + userId +
+ ", insertTime=" + insertTime +
+ ", goodsId=" + goodsId +
+ ", count=" + count +
+ ", state=" + state +
+ ", express=" + express +
+ ", expressNumber=" + expressNumber +
+ ", expressTime=" + expressTime +
+ ", integral=" + integral +
+ "}";
}
}
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 a238c85..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("商品兑换失败!");
@@ -153,8 +153,10 @@
// 扣除用户积分
result = result && studyClient.exchangeIntegral(needIntegral, Constants.BURDEN).getData();
return result;
- }private Boolean exchangeGoodParent(GoodExchangeDTO goodExchange, Recipient recipient, Integer number,
- Integer goodId, int needIntegral) {
+ }
+
+ private Boolean exchangeGoodParent(GoodExchangeDTO goodExchange, Recipient recipient, Integer number,
+ Integer goodId, int needIntegral) {
// 兑换成功,生成订单信息、生成积分明细(积分明细需要远程调用rouyi-study服务)
TOrder order = orderInfoParent(goodExchange, recipient, number, goodId, needIntegral);
boolean result = orderService.save(order);
@@ -175,7 +177,7 @@
return R.exchangeError("商品不存在,请稍后重试!");
}
LoginUserParent loginUser1 = tokenService.getLoginUser1();
- if (null == loginUser1){
+ if (null == loginUser1) {
return R.tokenError("登录失效");
}
// 校验用户积分是否足够兑换
@@ -237,13 +239,15 @@
order.setGoodsId(goodId);
order.setCount(number);
order.setState(1);
+ order.setRemark(goodExchange.getRemark());
order.setIntegral(needIntegral);
order.setConsigneeName(recipient.getRecipient());
order.setConsigneePhone(recipient.getRecipientPhone());
- order.setConsigneeAddress(recipient.getAddress());
+ order.setConsigneeAddress(recipient.getProvince() + recipient.getCity() + recipient.getAddress());
order.setDisabled(Boolean.FALSE);
return order;
}
+
private TOrder orderInfoParent(GoodExchangeDTO goodExchange, Recipient recipient, Integer number, Integer goodId, int needIntegral) {
TOrder order = new TOrder();
order.setOrderNumber(goodExchange.getOrderNumber());
@@ -252,10 +256,11 @@
order.setGoodsId(goodId);
order.setCount(number);
order.setState(1);
+ order.setRemark(goodExchange.getRemark());
order.setIntegral(needIntegral);
order.setConsigneeName(recipient.getRecipient());
order.setConsigneePhone(recipient.getRecipientPhone());
- order.setConsigneeAddress(recipient.getAddress());
+ order.setConsigneeAddress(recipient.getProvince() + recipient.getCity() + recipient.getAddress());
order.setDisabled(Boolean.FALSE);
return order;
}
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/vo/GoodDetailVO.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/vo/GoodDetailVO.java
index e5ca522..2f7212a 100644
--- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/vo/GoodDetailVO.java
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/vo/GoodDetailVO.java
@@ -31,12 +31,19 @@
private List<TGoodsType> goodTypes;
/**
+ * 商品剩余数量
+ */
+ @ApiModelProperty("商品剩余数量")
+ private Integer residueNumber;
+
+ /**
* 已兑换人数
*/
@ApiModelProperty("已兑换人数")
private Integer exchangeNumber;
+
/**
- * 已兑换人数
+ * 订单编号
*/
@ApiModelProperty("订单编号")
private String orderNumber;
@@ -47,10 +54,11 @@
@ApiModelProperty("用户默认收货地址(为:null则调用获取收货地址接口)")
private Recipient recipient;
- public GoodDetailVO(TGoods good, List<TGoodsType> goodTypes, Integer exchangeNumber) {
+ public GoodDetailVO(TGoods good, List<TGoodsType> goodTypes, Integer exchangeNumber, Integer residueNumber) {
this.good = good;
this.goodTypes = goodTypes;
this.exchangeNumber = exchangeNumber;
+ this.residueNumber = residueNumber;
}
public GoodDetailVO(TGoods good, Recipient recipient) {
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 b96e876..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
@@ -79,6 +79,8 @@
private IUserStudyRecordService studyRecordService;
@Resource
private ManagementClient managementClient;
+ @Resource
+ private ITUserPresentRecordService userPresentRecordService;
@PostMapping("/storyList")
// @ApiOperation(value = "配置学习类型选择故事", tags = {"题目管理"})
@@ -751,7 +753,11 @@
@ApiImplicitParam(value = "季度 首次进入季度quarter默认传1", name = "quarter", dataType = "Integer", required = true)
})
public R<List<StudyWeekDTO>> weekList(@RequestParam(defaultValue = "1") Integer type, @RequestParam Integer quarter) {
- List<StudyWeekDTO> result = studyService.weekList(type, quarter);
+ LoginUserParent loginUserStudy = tokenService.getLoginUserStudy();
+ if (null == loginUserStudy) {
+ return R.tokenError("登录失效!");
+ }
+ List<StudyWeekDTO> result = studyService.weekList(type, quarter, loginUserStudy.getUserid());
return R.ok(result);
}
@@ -784,11 +790,39 @@
throw new GlobalException("获取在线时间赠送积分信息失败!");
}
String integral = sysSet.getIntegral();
+ // 计算时间间隔
+ TUserPresentRecord record = userPresentRecordService.lambdaQuery()
+ .eq(TUserPresentRecord::getUserId, loginStudy.getUserid())
+ .orderByDesc(TUserPresentRecord::getPresentTime)
+ .eq(TUserPresentRecord::getIsDelete, 0).last("limit 1").one();
+ boolean result = true;
TUser user = userService.lambdaQuery().eq(TUser::getId, loginStudy.getUserid())
.eq(TUser::getDisabled, 0).one();
- boolean update = userService.lambdaUpdate().set(TUser::getIntegral, user.getIntegral() + Integer.parseInt(integral))
- .eq(TUser::getId, loginStudy.getUserid()).update();
- return R.ok(update);
+ if (null == record) {
+ // 赠送积分
+ result = userService.lambdaUpdate().set(TUser::getIntegral, user.getIntegral() + Integer.parseInt(integral))
+ .eq(TUser::getId, loginStudy.getUserid()).update();
+ // 添加赠送积分记录
+ TUserPresentRecord data = new TUserPresentRecord();
+ data.setUserId(loginStudy.getUserid());
+ data.setPresentTime(new Date());
+ data.setIsDelete(0);
+ result = result && userPresentRecordService.save(data);
+ } else {
+ if (System.currentTimeMillis() - record.getPresentTime().getTime() >= 10 * 60 * 1000) {
+ // 赠送积分
+ result = userService.lambdaUpdate()
+ .set(TUser::getIntegral, user.getIntegral() + Integer.parseInt(integral))
+ .eq(TUser::getId, loginStudy.getUserid()).update();
+ // 添加赠送积分记录
+ TUserPresentRecord data = new TUserPresentRecord();
+ data.setUserId(loginStudy.getUserid());
+ data.setPresentTime(new Date());
+ data.setIsDelete(0);
+ result = result && userPresentRecordService.save(data);
+ }
+ }
+ return R.ok(result);
}
/**
@@ -828,7 +862,7 @@
.collect(Collectors.toList());
result = new SubjectRecordResultVO(teamIds, topicIds, subjectRecord.getAnswerNumber(), subjectRecord.getCorrectNumber());
} else {
- result = new SubjectRecordResultVO();
+ result = null;
}
subjectRecordService.lambdaUpdate().set(TSubjectRecord::getDisabled, 0)
.eq(TSubjectRecord::getUserId, loginStudy.getUserid()).update();
@@ -850,28 +884,64 @@
TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userid)
.eq(TUserStudy::getDisabled, 0).one();
if (null == userStudy) {
- throw new GlobalException("登录用户学习记录不存在!");
+ userStudy = createUserStudy(userid);
}
+ 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())) {
// 计算完成率
- int completionRate = exitLearn.getTopicIds().split(",").length * 5;
Integer type = exitLearn.getType();
// 更新用户学习完成率
- if (Constants.ONE.equals(type) && userStudy.getListen() < completionRate) {
+ if (Constants.ONE.equals(type)) {
// 听音选图
- userStudy.setListen(completionRate);
- } else if (Constants.TWO.equals(type) && userStudy.getLook() < completionRate) {
+ List<TStudyListen> studyListens = studyListenService.listenSelectPicture(quarter, week, day);
+ int item = 0;
+ for (TStudyListen studyListen : studyListens) {
+ item += studyListen.getSubject().split(",").length;
+ }
+ int i = (int) ((double) (exitLearn.getTopicIds().split(",").length / item) * 100);
+ if (i > userStudy.getListen()) {
+ userStudy.setListen(100 - i);
+ }
+ } else if (Constants.TWO.equals(type)) {
// 看图选音
- userStudy.setLook(completionRate);
- } else if (Constants.THREE.equals(type) && userStudy.getInduction() < completionRate) {
+ List<TStudyLook> lookList = studyLookService.pictureSelectVoice(quarter, week, day);
+ if (!lookList.isEmpty()) {
+ int item = lookList.size();
+ int i = (int) ((double) (schedule / item)) * 100;
+ if (i > userStudy.getLook()) {
+ userStudy.setLook(100 - i);
+ }
+ }
+ } else if (Constants.THREE.equals(type)) {
// 归纳排除
- userStudy.setInduction(completionRate);
- } else if (Constants.FOUR.equals(type) && userStudy.getAnswer() < completionRate) {
+ List<TStudyInduction> inductionList = studyInductionService.induceExclude(quarter, week, day);
+ if (!inductionList.isEmpty()) {
+ int item = inductionList.size();
+ int i = (int) ((double) (schedule / item)) * 100;
+ if (i > userStudy.getInduction()) {
+ userStudy.setInduction(100 - i);
+ }
+ }
+ } else if (Constants.FOUR.equals(type)) {
// 有问有答
- userStudy.setAnswer(completionRate);
- } else if (Constants.FIVE.equals(type) && userStudy.getPair() < completionRate) {
+ List<TStudyAnswer> answerList = studyAnswerService.questionsAndAnswers(quarter, week, day);
+ if (answerList.size() % Constants.TWO == Constants.ZERO) {
+ int i = (int) ((double) (schedule / (answerList.size() / 2))) * 100;
+ if (i > userStudy.getAnswer()) {
+ userStudy.setAnswer(100 - i);
+ }
+ }
+ } else if (Constants.FIVE.equals(type)) {
// 音图相配
- userStudy.setPair(completionRate);
+ List<TStudyPair> pairList = studyPairService.pictureMateVoice(quarter, week, day);
+ int item = pairList.size();
+ int i = (int) ((double) (schedule / item)) * 100;
+ if (i > userStudy.getPair()) {
+ userStudy.setPair(100 - i);
+ }
}
}
// 学习时长更新
@@ -903,7 +973,7 @@
// 非会员只能查看非会员题目,会员可以查看所有题目
List<TStudyListen> studyListens = studyListenService.listenSelectPicture(quarter, week, day);
for (TStudyListen studyListen : studyListens) {
- if (studyListen.getIsVip() == 1) {
+ if (studyListen.getIsVip() == 0) {
// 需要会员查看
if (!isVip) {
// 不是会员
@@ -934,7 +1004,7 @@
// 非会员只能查看非会员题目,会员可以查看所有题目
List<TStudyLook> lookList = studyLookService.pictureSelectVoice(quarter, week, day);
for (TStudyLook studyListen : lookList) {
- if (studyListen.getIsVip() == 1) {
+ if (studyListen.getIsVip() == 0) {
// 需要会员查看
if (!isVip) {
// 不是会员
@@ -965,7 +1035,7 @@
// 非会员只能查看非会员题目,会员可以查看所有题目
List<TStudyInduction> inductionList = studyInductionService.induceExclude(quarter, week, day);
for (TStudyInduction studyListen : inductionList) {
- if (studyListen.getIsVip() == 1) {
+ if (studyListen.getIsVip() == 0) {
// 需要会员查看
if (!isVip) {
// 不是会员
@@ -996,7 +1066,7 @@
// 非会员只能查看非会员题目,会员可以查看所有题目
List<TStudyAnswer> answerList = studyAnswerService.questionsAndAnswers(quarter, week, day);
for (TStudyAnswer studyListen : answerList) {
- if (studyListen.getIsVip() == 1) {
+ if (studyListen.getIsVip() == 0) {
// 需要会员查看
if (!isVip) {
// 不是会员
@@ -1027,7 +1097,7 @@
// 非会员只能查看非会员题目,会员可以查看所有题目
List<TStudyPair> pairList = studyPairService.pictureMateVoice(quarter, week, day);
for (TStudyPair pair : pairList) {
- if (pair.getIsVip() == 1) {
+ if (pair.getIsVip() == 0) {
// 需要会员查看
if (!isVip) {
// 不是会员
@@ -1066,6 +1136,7 @@
.eq(TUserStudyRecord::getWeek, completeStudy.getWeek())
.eq(TUserStudyRecord::getDay, completeStudy.getDay())
.eq(TUserStudyRecord::getType, 0)
+ .eq(TUserStudyRecord::getStudyType, completeStudy.getType())
.eq(TUserStudyRecord::getUserId, userId).list();
if (list.isEmpty()) {
obtainedIntegral = 0;
@@ -1092,18 +1163,19 @@
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);
}
- // 学习配置列表
- List<TStudy> studyList = studyService.lambdaQuery().eq(TStudy::getDisabled, 0)
- .orderByAsc(TStudy::getWeek).list();
- if (studyList.isEmpty()) {
- throw new GlobalException("学习配置列表未配置或数据失效!");
- }
// 更改学习记录
- Boolean updateStudyRecord = userStudyService.exchangeStudyRecord(studyList, userId, completeStudy);
+ TUserStudy userStudyRecord = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
+ .eq(TUserStudy::getDisabled, 0).one();
+ if (null == userStudyRecord) {
+ userStudyRecord = createUserStudy(userId);
+ }
+ Boolean updateStudyRecord = userStudyService.exchangeStudyRecord(userStudyRecord, userId, completeStudy);
return R.ok(update && updateStudyRecord);
}
@@ -1280,6 +1352,18 @@
user.setIntegral(user.getIntegral() + availableIntegral);
add = add && userService.updateById(user);
}
+ // 学习时长更新
+ TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userid)
+ .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());
+ boolean update = userStudyService.updateById(userStudy);
// 超级记忆逻辑
if (Constants.MEMORY.equals(completeStudy.getGameName())) {
// 学习配置列表
@@ -1297,15 +1381,28 @@
String rate = game.getRate().split(",")[completeStudy.getDifficulty()];
add = add && completeStudy.getAccuracy() >= Integer.parseInt(rate);
}
- // 学习时长更新
- TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userid)
- .eq(TUserStudy::getDisabled, 0).one();
- 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);
return R.ok(add && update);
+ }
+
+ private TUserStudy createUserStudy(Integer userid) {
+ TUserStudy userStudy = new TUserStudy();
+ userStudy.setUserId(userid);
+ // 学习周目
+ TStudy tStudy = studyService.lambdaQuery().eq(TStudy::getQuarter, Constants.ONE)
+ .orderByAsc(TStudy::getWeek).last("limit 1").one();
+ userStudy.setWeek(tStudy.getWeek());
+ userStudy.setDay(Constants.ONE);
+ userStudy.setTotalStudy(Constants.ZERO);
+ userStudy.setTodayStudy(Constants.ZERO);
+ userStudy.setWeekStudy(Constants.ZERO);
+ userStudy.setMonthStudy(Constants.ZERO);
+ userStudy.setListen(Constants.BURDEN_ONE);
+ userStudy.setLook(Constants.BURDEN_ONE);
+ userStudy.setInduction(Constants.BURDEN_ONE);
+ userStudy.setAnswer(Constants.BURDEN_ONE);
+ userStudy.setPair(Constants.BURDEN_ONE);
+ userStudyService.save(userStudy);
+ return userStudy;
}
private List<String> getSubjectId(Integer week) {
@@ -1412,10 +1509,13 @@
// 学习时长更新
TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
.eq(TUserStudy::getDisabled, 0).one();
- userStudy.setTotalStudy(userStudy.getTotalStudy() + studyTime);
- userStudy.setTodayStudy(userStudy.getTodayStudy() + studyTime);
- userStudy.setWeekStudy(userStudy.getWeekStudy() + studyTime);
- userStudy.setMonthStudy(userStudy.getMonthStudy() + studyTime);
+ if (null == userStudy) {
+ userStudy = createUserStudy(userId);
+ userStudy.setTotalStudy(userStudy.getTotalStudy() + studyTime);
+ userStudy.setTodayStudy(userStudy.getTodayStudy() + studyTime);
+ userStudy.setWeekStudy(userStudy.getWeekStudy() + studyTime);
+ userStudy.setMonthStudy(userStudy.getMonthStudy() + studyTime);
+ }
boolean update = userStudyService.updateById(userStudy);
if (!update) {
throw new GlobalException("学习时长更新失败!");
@@ -1477,23 +1577,28 @@
// 学习记录
TUserStudy studyRecord = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
.eq(TUserStudy::getDisabled, 0).one();
- // 学习时长格式转换
- Integer todayStudy = studyRecord.getTodayStudy();
- studyRecord.setTodayStudy(Math.round((float) todayStudy / 3600));
- Integer weekStudy = studyRecord.getWeekStudy();
- studyRecord.setWeekStudy(Math.round((float) weekStudy / 3600));
- Integer monthStudy = studyRecord.getMonthStudy();
- studyRecord.setMonthStudy(Math.round((float) monthStudy / 3600));
// 总时长还需计算上游戏测试成绩时长
List<TGameRecord> gameRecordList = gameRecordService.lambdaQuery().eq(TGameRecord::getUserId, userId)
.eq(TGameRecord::getDisabled, 0).list();
- int sum = gameRecordList.stream().map(TGameRecord::getUseTime).mapToInt(Integer::intValue).sum();
- Integer totalStudy = studyRecord.getTotalStudy();
- studyRecord.setTotalStudy(Math.round((float) (totalStudy + sum) / 3600));
- // 剩余周目
- int size = studyService.list(new QueryWrapper<TStudy>()
- .eq("type", 1)).size();
- studyRecord.setSurplus(size - studyRecord.getWeek());
+ if (null != studyRecord) {
+ // 学习时长格式转换
+ Integer todayStudy = studyRecord.getTodayStudy();
+ studyRecord.setTodayStudy(Math.round((float) todayStudy / 3600));
+ Integer weekStudy = studyRecord.getWeekStudy();
+ studyRecord.setWeekStudy(Math.round((float) weekStudy / 3600));
+ Integer monthStudy = studyRecord.getMonthStudy();
+ studyRecord.setMonthStudy(Math.round((float) monthStudy / 3600));
+ // 游戏总时长
+ int sum = gameRecordList.stream().map(TGameRecord::getUseTime).mapToInt(Integer::intValue).sum();
+ Integer totalStudy = studyRecord.getTotalStudy();
+ studyRecord.setTotalStudy(Math.round((float) (totalStudy + sum) / 3600));
+ // 剩余周目
+ List<TStudy> studyList = studyService.lambdaQuery().eq(TStudy::getDisabled, 0)
+ .eq(TStudy::getType, Constants.ONE)
+ .orderByAsc(TStudy::getWeek).list();
+ int size = studyService.residueWeek(studyRecord,studyList);
+ studyRecord.setSurplus(size);
+ }
return R.ok(new StudyRecordResultVO(studyRecord, gameRecordList));
}
@@ -1568,7 +1673,14 @@
if (tokenService.getLoginUserStudy() == null) {
return R.tokenError("登录失效");
}
- return R.ok(integralRecordService.integralDetail(new Page<>(pageNum, pageSize), tokenService.getLoginUserStudy().getUserid(), time));
+ IPage<TIntegralRecord> page = integralRecordService.integralDetail(new Page<>(pageNum, pageSize),
+ tokenService.getLoginUserStudy().getUserid(), time);
+ for (TIntegralRecord record : page.getRecords()) {
+ if (!record.getIntegral().startsWith("-")) {
+ record.setIntegral("+" + record.getIntegral());
+ }
+ }
+ return R.ok(page);
}
@GetMapping("/integralDetailParent")
@@ -1616,6 +1728,7 @@
integralRecord.setUpdateTime(new Date());
return R.ok(integralRecordService.save(integralRecord));
}
+
@GetMapping("/addIntegralDetailParent")
// @ApiOperation(value = "添加-积分明细", tags = {"添加-积分明细"})
@ApiImplicitParams({
@@ -1680,10 +1793,11 @@
}
return R.ok(userService.updateById(user));
}
+
@GetMapping("/exchangeIntegralParent")
// @ApiOperation(value = "用户积分变动", tags = {"用户积分变动"})
public R<Boolean> exchangeIntegralParent(@RequestParam("integral") Integer integral, @RequestParam("method") String method) {
- if (tokenService.getLoginUser1()==null){
+ if (tokenService.getLoginUser1() == null) {
return R.tokenError("登录失效");
}
TUser user = userService.getById(tokenService.getLoginUser1().getUserid());
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
index 4c69795..7d150a9 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
@@ -503,7 +503,10 @@
if (null == userStudy) {
TUserStudy study = new TUserStudy();
study.setUserId(tUser1.getId());
- study.setWeek(Constants.ONE);
+ // 学习周目
+ TStudy tStudy = studyService.lambdaQuery().eq(TStudy::getQuarter, Constants.ONE)
+ .orderByAsc(TStudy::getWeek).last("limit 1").one();
+ study.setWeek(tStudy.getWeek());
study.setDay(Constants.ONE);
study.setTotalStudy(Constants.ZERO);
study.setTodayStudy(Constants.ZERO);
@@ -564,25 +567,6 @@
HashMap<String, Object> map = new HashMap<>();
// 获取登录token
map.put("token", tokenService.createTokenStudy(loginUserParent));
- // 学习进度检查
- TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, user.getId())
- .eq(TUserStudy::getDisabled, 0).one();
- if (null == userStudy) {
- TUserStudy study = new TUserStudy();
- study.setUserId(user.getId());
- study.setWeek(Constants.ONE);
- study.setDay(Constants.ONE);
- study.setTotalStudy(Constants.ZERO);
- study.setTodayStudy(Constants.ZERO);
- study.setWeekStudy(Constants.ZERO);
- study.setMonthStudy(Constants.ZERO);
- study.setListen(Constants.BURDEN_ONE);
- study.setLook(Constants.BURDEN_ONE);
- study.setInduction(Constants.BURDEN_ONE);
- study.setAnswer(Constants.BURDEN_ONE);
- study.setPair(Constants.BURDEN_ONE);
- userStudyService.save(study);
- }
return R.ok(map);
}
@@ -707,6 +691,9 @@
}
TUser user = userService.lambdaQuery().eq(TUser::getId, loginUserStudy.getUserid()).one();
TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, user.getId()).eq(TUserStudy::getDisabled, 0).one();
+ if (null == userStudy) {
+ userStudy = createUserStudy(loginUserStudy.getUserid());
+ }
// 学习时长格式转换
Integer todayStudy = userStudy.getTodayStudy();
userStudy.setTodayStudy(Math.round((float) todayStudy / 3600));
@@ -722,7 +709,30 @@
Integer totalStudy = userStudy.getTotalStudy();
userStudy.setTotalStudy(Math.round((float) (totalStudy + sum) / 3600));
return R.ok(new UserPersonalCenterVO(user, userStudy));
- }@GetMapping("/userInfoParent")
+ }
+
+ private TUserStudy createUserStudy(Integer userid) {
+ TUserStudy userStudy = new TUserStudy();
+ userStudy.setUserId(userid);
+ // 学习周目
+ TStudy tStudy = studyService.lambdaQuery().eq(TStudy::getQuarter, Constants.ONE)
+ .orderByAsc(TStudy::getWeek).last("limit 1").one();
+ userStudy.setWeek(tStudy.getWeek());
+ userStudy.setDay(Constants.ONE);
+ userStudy.setTotalStudy(Constants.ZERO);
+ userStudy.setTodayStudy(Constants.ZERO);
+ userStudy.setWeekStudy(Constants.ZERO);
+ userStudy.setMonthStudy(Constants.ZERO);
+ userStudy.setListen(Constants.BURDEN_ONE);
+ userStudy.setLook(Constants.BURDEN_ONE);
+ userStudy.setInduction(Constants.BURDEN_ONE);
+ userStudy.setAnswer(Constants.BURDEN_ONE);
+ userStudy.setPair(Constants.BURDEN_ONE);
+ userStudyService.save(userStudy);
+ return userStudy;
+ }
+
+ @GetMapping("/userInfoParent")
@ApiOperation(value = "用户详情", tags = {"家长端-用户详情"})
public R<TUser> userInfoParent() {
LoginUserParent loginUserStudy = tokenService.getLoginUser1();
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TIntegralRecord.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TIntegralRecord.java
index b593a17..92f08f5 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TIntegralRecord.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TIntegralRecord.java
@@ -1,11 +1,15 @@
package com.ruoyi.study.domain;
import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.web.domain.BaseModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+
+import java.util.Date;
/**
* <p>
@@ -54,6 +58,11 @@
@ApiModelProperty("故事id 对应t_story_listen")
private Integer storyId;
+ @ApiModelProperty("积分变动时间")
+ @TableField(exist = false)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+ private Date time;
+
/**
* 前端用,返回积分变动类型
*
@@ -62,4 +71,8 @@
public String getType() {
return integral.startsWith("-") ? "减少" : "增加";
}
+
+ public Date getTime() {
+ return super.getCreateTime();
+ }
}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TSubject.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TSubject.java
index 47e586f..10655aa 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TSubject.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TSubject.java
@@ -1,6 +1,7 @@
package com.ruoyi.study.domain;
import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.web.domain.BaseModel;
@@ -62,4 +63,8 @@
@ApiModelProperty(value = "错误语音 多个逗号拼接")
private String error;
+ @ApiModelProperty(value = "排序")
+ @TableField(exist = false)
+ private Integer sort;
+
}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserPresentRecord.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserPresentRecord.java
new file mode 100644
index 0000000..11b6dc3
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserPresentRecord.java
@@ -0,0 +1,49 @@
+package com.ruoyi.study.domain;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户赠送积分记录表
+ * </p>
+ *
+ * @author hjl
+ * @since 2024-06-20
+ */
+@Data
+@TableName("t_user_present_record")
+public class TUserPresentRecord {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 用户id
+ */
+ @ApiModelProperty("用户id")
+ @TableField("user_id")
+ private Integer userId;
+
+ /**
+ * 赠送时间
+ */
+ @ApiModelProperty("赠送时间")
+ @TableField("present_time")
+ private Date presentTime;
+
+ /**
+ * 是否软删除
+ */
+ @ApiModelProperty("是否软删除(0:未删除;1:已删除)")
+ @TableField("is_delete")
+ private Integer isDelete;
+
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserStudyRecord.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserStudyRecord.java
index ef7e136..785e1dd 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserStudyRecord.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserStudyRecord.java
@@ -70,6 +70,13 @@
private Integer type;
/**
+ * 题目类型(1:听音选图;2:看图选音;3:归纳排除;4:有问有答;5:音图相配)
+ */
+ @ApiModelProperty("题目类型(1:听音选图;2:看图选音;3:归纳排除;4:有问有答;5:音图相配)")
+ @TableField("study_type")
+ private Integer studyType;
+
+ /**
* 自主故事id
*/
@ApiModelProperty("自主故事id")
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StudyWeekDTO.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StudyWeekDTO.java
index 34c6d56..cf6b5a0 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StudyWeekDTO.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StudyWeekDTO.java
@@ -25,11 +25,15 @@
@ApiModelProperty("study表Id")
private String id;
- public StudyWeekDTO(Integer week, Integer type, Integer quarter, String title, Integer total) {
+ @ApiModelProperty("能否进入周目学习")
+ private Boolean canStudy;
+
+ public StudyWeekDTO(Integer week, Integer type, Integer quarter, String title, Integer total,Boolean canStudy) {
super.setWeek(week);
super.setType(type);
this.quarter = quarter;
this.title = title;
this.totalIntegral = total;
+ this.canStudy = canStudy;
}
}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserPresentRecordMapper.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserPresentRecordMapper.java
new file mode 100644
index 0000000..bdce60d
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserPresentRecordMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.study.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.study.domain.TUserPresentRecord;
+
+/**
+ * <p>
+ * 用户赠送积分记录表 Mapper 接口
+ * </p>
+ *
+ * @author 无关风月
+ * @since 2024-04-26
+ */
+public interface TUserPresentRecordMapper extends BaseMapper<TUserPresentRecord> {
+
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStudyService.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStudyService.java
index 4b6653e..b493ae8 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStudyService.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStudyService.java
@@ -2,7 +2,6 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.study.domain.*;
-import com.ruoyi.study.dto.CompleteGameDTO;
import com.ruoyi.study.dto.StudyWeekDTO;
import com.ruoyi.study.vo.*;
@@ -23,9 +22,10 @@
*
* @param type 所属类型
* @param quarter 季度
+ * @param userId 用户id
* @return 列表
*/
- List<StudyWeekDTO> weekList(Integer type, Integer quarter);
+ List<StudyWeekDTO> weekList(Integer type, Integer quarter, Integer userId);
/**
* 获取学习进度及学习时长等信息
@@ -115,11 +115,11 @@
int computeTotalIntegral(List<String> studyIds, Integer type, Integer accuracy);
/**
- * 超级记忆正确率达到通关率标准,才能进入下一周目学习
+ * 计算剩余学习周目
*
- * @param game 游戏信息
- * @param userid 用户id
- * @param completeStudy 游戏完成信息
+ * @param studyRecord 学习进度信息
+ * @param studyList 学习配置列表
+ * @return 剩余周目
*/
- void checkRate(TGame game, Integer userid, CompleteGameDTO completeStudy);
+ int residueWeek(TUserStudy studyRecord, List<TStudy> studyList);
}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserPresentRecordService.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserPresentRecordService.java
new file mode 100644
index 0000000..bca8999
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserPresentRecordService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.study.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.study.domain.TUserPresentRecord;
+
+/**
+ * <p>
+ * 用户赠送积分记录表 服务类
+ * </p>
+ *
+ * @author 无关风月
+ * @since 2024-04-26
+ */
+public interface ITUserPresentRecordService extends IService<TUserPresentRecord> {
+
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserStudyService.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserStudyService.java
index c57c97e..0af3259 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserStudyService.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserStudyService.java
@@ -37,12 +37,12 @@
/**
* 更改学习进度
*
- * @param studyList 学习配置列表
- * @param userId 用户id
- * @param completeStudy 学习情况
+ * @param userId 用户id
+ * @param completeStudy 学习情况
+ * @param userStudyRecord 学习进度
* @return 更改结果
*/
- Boolean exchangeStudyRecord(List<TStudy> studyList, Integer userId, CompleteStudyDTO completeStudy);
+ Boolean exchangeStudyRecord(TUserStudy userStudyRecord, Integer userId, CompleteStudyDTO completeStudy);
/**
* 超级记忆正确率达到通关率标准,才能进入下一周目学习
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 b77c602..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
@@ -3,9 +3,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.exception.GlobalException;
-import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.study.domain.*;
-import com.ruoyi.study.dto.CompleteGameDTO;
import com.ruoyi.study.dto.StudyWeekDTO;
import com.ruoyi.study.mapper.TStudyMapper;
import com.ruoyi.study.service.*;
@@ -56,7 +54,7 @@
}
@Override
- public List<StudyWeekDTO> weekList(Integer type, Integer quarter) {
+ public List<StudyWeekDTO> weekList(Integer type, Integer quarter, Integer userId) {
List<StudyWeekDTO> result = new ArrayList<>();
// 根据季度和type查询学习配置
List<TStudy> study = lambdaQuery().eq(TStudy::getQuarter, quarter).eq(TStudy::getType, type)
@@ -125,9 +123,41 @@
total += storyListenList.stream().map(TStoryListen::getIntegral).mapToInt(Integer::intValue).sum();
// 自主故事 - 看图配音
total += storyListenList.stream().map(TStoryListen::getLookIntegral).mapToInt(Integer::intValue).sum();
- result.add(new StudyWeekDTO(week, type, quarter, title, total));
+ // 判断周目是否可以进入学习
+ Boolean canStudy = checkWeekCanStudy(userId, item);
+ result.add(new StudyWeekDTO(week, type, quarter, title, total, canStudy));
}
return result;
+ }
+
+ /**
+ * @param userId 用户id
+ * @return 当前周目是否学习
+ */
+ private Boolean checkWeekCanStudy(Integer userId, TStudy study) {
+ TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
+ .eq(TUserStudy::getDisabled, 0).one();
+ if (null == userStudy) {
+ userStudy = new TUserStudy();
+ userStudy.setUserId(userId);
+ // 学习周目
+ TStudy tStudy = this.lambdaQuery().eq(TStudy::getQuarter, Constants.ONE)
+ .orderByAsc(TStudy::getWeek).last("limit 1").one();
+ userStudy.setWeek(tStudy.getWeek());
+ userStudy.setDay(Constants.ONE);
+ userStudy.setTotalStudy(Constants.ZERO);
+ userStudy.setTodayStudy(Constants.ZERO);
+ userStudy.setWeekStudy(Constants.ZERO);
+ userStudy.setMonthStudy(Constants.ZERO);
+ userStudy.setListen(Constants.BURDEN_ONE);
+ userStudy.setLook(Constants.BURDEN_ONE);
+ userStudy.setInduction(Constants.BURDEN_ONE);
+ userStudy.setAnswer(Constants.BURDEN_ONE);
+ userStudy.setPair(Constants.BURDEN_ONE);
+ userStudyService.save(userStudy);
+ }
+ // 学习记录所属周目大于当前学习周目,判断为已学习
+ return userStudy.getWeek() >= study.getWeek();
}
@Override
@@ -177,7 +207,6 @@
List<List<TSubject>> subjectList = new ArrayList<>();
for (TStudyListen studyListen : studyListens) {
List<String> subjectIds = Arrays.stream(studyListen.getSubject().split(",")).collect(Collectors.toList());
- Collections.shuffle(subjectIds);
List<TSubject> list = new ArrayList<>();
// 图片及语音集合
for (String id : subjectIds) {
@@ -210,15 +239,18 @@
// 语音及图片
List<List<TSubject>> subjectList = new ArrayList<>();
for (TStudyLook studyLook : lookList) {
+ List<String> sortList = Arrays.stream(studyLook.getSort().split(",")).collect(Collectors.toList());
List<String> subjectIds = Arrays.stream(studyLook.getSubject().split(",")).collect(Collectors.toList());
- Collections.shuffle(subjectIds);
List<TSubject> list = new ArrayList<>();
// 图片及语音集合
- for (String id : subjectIds) {
- TSubject data = subjectService.lambdaQuery().eq(TSubject::getId, id)
+ for (int i = 0; i < subjectIds.size(); i++) {
+ TSubject data = subjectService.lambdaQuery().eq(TSubject::getId, subjectIds.get(i))
.eq(TSubject::getDisabled, 0).one();
+ data.setSort(Integer.parseInt(sortList.get(i)));
list.add(data);
}
+ // 根据顺序排序
+ list.sort(Comparator.comparingInt(TSubject::getSort));
subjectList.add(list);
}
return new StudyLookResultVO(learnStudy, subjectList);
@@ -245,14 +277,36 @@
List<List<TSubject>> subjectList = new ArrayList<>();
for (TStudyInduction data : inductionList) {
List<String> subjectIds = Arrays.stream(data.getSubject().split(",")).collect(Collectors.toList());
- Collections.shuffle(subjectIds);
List<TSubject> subjectLists = new ArrayList<>();
- for (String id : subjectIds) {
+ // 第一组题 固定下标为0,1,2的题
+ for (int i = 0; i < Constants.THREE; i++) {
+ String id = subjectIds.get(i);
+ if (!id.startsWith("-")) {
+ subjectLists.add(subjectService.getById(id));
+ }
+ }
+ for (int i = 0; i < Constants.THREE; i++) {
+ String id = subjectIds.get(i);
if (id.startsWith("-")) {
id = id.replace("-", "");
+ subjectLists.add(subjectService.getById(id));
}
- subjectLists.add(subjectService.getById(id));
}
+ // 第二组题,固定下标为3,4的题
+ for (int i = Constants.THREE; i < Constants.FIVE; i++) {
+ String id = subjectIds.get(i);
+ if (!id.startsWith("-")) {
+ subjectLists.add(subjectService.getById(id));
+ }
+ }
+ for (int i = Constants.THREE; i < Constants.FIVE; i++) {
+ String id = subjectIds.get(i);
+ if (id.startsWith("-")) {
+ id = id.replace("-", "");
+ subjectLists.add(subjectService.getById(id));
+ }
+ }
+ subjectLists.add(subjectService.getById(subjectIds.get(subjectIds.size() - 1).replace("-", "")));
subjectList.add(subjectLists);
}
return new StudyInductionResultVO(learnStudy, subjectList);
@@ -297,22 +351,34 @@
QuestionsAnswersSubjectVO oneVO = new QuestionsAnswersSubjectVO();
TSubject one1 = subjectService.lambdaQuery().eq(TSubject::getId, subject)
.eq(TSubject::getDisabled, 0).one();
- BeanUtils.copyProperties(one1, oneVO);
+ copyProperties(one1, oneVO);
// 回答题目信息
QuestionsAnswersSubjectVO twoVO = new QuestionsAnswersSubjectVO();
TSubject two1 = subjectService.lambdaQuery().eq(TSubject::getId, answerSubject)
.eq(TSubject::getDisabled, 0).one();
- BeanUtils.copyProperties(two1, twoVO);
+ copyProperties(two1, twoVO);
// 判断第一组题目的问题题目及回答题目,哪个是答案
if (Constants.ZERO.equals(one.getIsAnswer())) {
- oneVO.setIsQuestion(0);
- twoVO.setIsQuestion(1);
- } else {
oneVO.setIsQuestion(1);
twoVO.setIsQuestion(0);
+ } else {
+ oneVO.setIsQuestion(0);
+ twoVO.setIsQuestion(1);
}
voList.add(oneVO);
voList.add(twoVO);
+ }
+
+ private void copyProperties(TSubject subject, QuestionsAnswersSubjectVO vo) {
+ vo.setId(subject.getId());
+ vo.setName(subject.getName());
+ vo.setEnglish(subject.getEnglish());
+ vo.setType(subject.getType());
+ vo.setState(subject.getState());
+ vo.setImg(subject.getImg());
+ vo.setCorrect(subject.getCorrect());
+ vo.setError(subject.getError());
+ vo.setSort(subject.getSort());
}
@Override
@@ -336,7 +402,6 @@
List<List<TSubject>> subjectList = new ArrayList<>();
for (TStudyPair data : pair) {
List<String> subjectIds = Arrays.stream(data.getSubject().split(",")).collect(Collectors.toList());
- Collections.shuffle(subjectIds);
List<TSubject> subjectLists = new ArrayList<>();
for (String id : subjectIds) {
if (id.startsWith("-")) {
@@ -351,17 +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 listen = result.getListen();
- Integer look = result.getLook();
- Integer induction = result.getInduction();
- Integer answer = result.getAnswer();
- Integer pair = result.getPair();
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初始化学习进度
@@ -378,22 +465,28 @@
} else {
defaultSchedule = 0;
}
- // 进度学习完成度计算总学习进度
- if (!Constants.ZERO.equals(listen) && !Constants.BURDEN_ONE.equals(listen)) {
- defaultSchedule += 4 * (100 / listen);
+ // 根据五种学习计算进度
+ Integer listen = result.getListen();
+ if (!Constants.BURDEN_ONE.equals(listen)) {
+ defaultSchedule += (int)(((double)listen / 100) * 4);
}
- if (!Constants.ZERO.equals(look) && !Constants.BURDEN_ONE.equals(look)) {
- defaultSchedule += 4 * (100 / look);
+ Integer look = result.getLook();
+ if (!Constants.BURDEN_ONE.equals(look)) {
+ defaultSchedule += (int)(((double)look / 100) * 4);
}
- if (!Constants.ZERO.equals(induction) && !Constants.BURDEN_ONE.equals(induction)) {
- defaultSchedule += 4 * (100 / induction);
+ Integer induction = result.getInduction();
+ if (!Constants.BURDEN_ONE.equals(induction)) {
+ defaultSchedule += (int)(((double)induction / 100) * 4);
}
- if (!Constants.ZERO.equals(answer) && !Constants.BURDEN_ONE.equals(answer)) {
- defaultSchedule += 4 * (100 / answer);
+ Integer answer = result.getAnswer();
+ if (!Constants.BURDEN_ONE.equals(answer)) {
+ defaultSchedule += (int)(((double)answer / 100) * 4);
}
- if (!Constants.ZERO.equals(pair) && !Constants.BURDEN_ONE.equals(pair)) {
- defaultSchedule += 4 * (100 / pair);
+ Integer pair = result.getPair();
+ if (!Constants.BURDEN_ONE.equals(pair)) {
+ defaultSchedule += (int)(((double)pair / 100) * 4);
}
+
}
return defaultSchedule;
}
@@ -443,8 +536,65 @@
}
@Override
- public void checkRate(TGame game, Integer userid, CompleteGameDTO completeStudy) {
-
+ public int residueWeek(TUserStudy studyRecord, List<TStudy> studyList) {
+ // 已学习周目
+ int residueWeek = 0;
+ // 已学习到的周目
+ Integer studyWeek = studyRecord.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);
+ }
+ // 顺序排序
+ Map<Integer, List<TStudy>> itemMap = new HashMap<>(8);
+ List<Integer> keyList = new ArrayList<>();
+ for (Map.Entry<Integer, List<TStudy>> map : studyMap.entrySet()) {
+ Integer key = map.getKey();
+ keyList.add(key);
+ }
+ Collections.sort(keyList);
+ for (Integer key : keyList) {
+ List<TStudy> itemList = studyMap.get(key);
+ itemMap.put(key, itemList);
+ }
+ // 计算已学习周目
+ boolean v = false;
+ for (Map.Entry<Integer, List<TStudy>> map : itemMap.entrySet()) {
+ List<TStudy> list = map.getValue();
+ for (int i = 0; i < list.size(); i++) {
+ TStudy item = list.get(i);
+ if (item.getWeek().equals(studyWeek)) {
+ Integer listen = studyRecord.getListen();
+ Integer answer = studyRecord.getAnswer();
+ Integer look = studyRecord.getLook();
+ Integer induction = studyRecord.getInduction();
+ Integer pair = studyRecord.getPair();
+ Integer gameDifficulty = studyRecord.getGameDifficulty();
+ // 听音选图、看图选音、音图相配、有问有答、归纳排除的进度是否 100%,并且超级听力的游戏难度是否为2
+ boolean isStudy = Constants.ONE_HUNDRED.equals(listen) && Constants.ONE_HUNDRED.equals(look) &&
+ Constants.ONE_HUNDRED.equals(induction) && Constants.ONE_HUNDRED.equals(pair) &&
+ Constants.ONE_HUNDRED.equals(answer) && Constants.TWO.equals(gameDifficulty);
+ if (isStudy) {
+ residueWeek++;
+ }
+ v = true;
+ break;
+ } else {
+ residueWeek++;
+ }
+ }
+ if (v) {
+ break;
+ }
+ }
+ return studyList.size() - residueWeek;
}
}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserPresentRecordServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserPresentRecordServiceImpl.java
new file mode 100644
index 0000000..989b2f3
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserPresentRecordServiceImpl.java
@@ -0,0 +1,21 @@
+package com.ruoyi.study.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.study.domain.TUserPresentRecord;
+import com.ruoyi.study.mapper.TUserPresentRecordMapper;
+import com.ruoyi.study.service.ITUserPresentRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 用户赠送积分记录表 服务实现类
+ * </p>
+ *
+ * @author 无关风月
+ * @since 2024-04-26
+ */
+@Service
+public class TUserPresentRecordServiceImpl extends ServiceImpl<TUserPresentRecordMapper, TUserPresentRecord> implements ITUserPresentRecordService {
+
+
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java
index 100363e..d27f0d8 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java
@@ -17,6 +17,7 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
@@ -89,16 +90,15 @@
@Override
public Boolean isVip() {
-// TUser user = lambdaQuery().eq(TUser::getId, tokenService.getLoginUserStudy().getUserid())
-// .eq(TUser::getDisabled, 0).eq(TUser::getState,1).one();
-// // 是否为vip 逻辑
-// if (null == user) {
-// return false;
-// }
-// // vip过期时间,字段为空也表示 当前用户不是vip
-// Date vipEndTime = user.getVipEndTime();
-// return null != vipEndTime && System.currentTimeMillis() <= vipEndTime.getTime();
- return true;
+ TUser user = lambdaQuery().eq(TUser::getId, tokenService.getLoginUserStudy().getUserid())
+ .eq(TUser::getDisabled, 0).eq(TUser::getState,1).one();
+ // 是否为vip 逻辑
+ if (null == user) {
+ return false;
+ }
+ // vip过期时间,字段为空也表示 当前用户不是vip
+ Date vipEndTime = user.getVipEndTime();
+ return null != vipEndTime && System.currentTimeMillis() <= vipEndTime.getTime();
}
}
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 eba7df6..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
@@ -13,6 +13,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -49,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
@@ -88,11 +87,9 @@
}
@Override
- public Boolean exchangeStudyRecord(List<TStudy> studyList, Integer userId, CompleteStudyDTO completeStudy) {
+ public Boolean exchangeStudyRecord(TUserStudy userStudyRecord, Integer userId, CompleteStudyDTO completeStudy) {
Integer studyTime = completeStudy.getStudyTime();
// 学习记录
- TUserStudy userStudyRecord = lambdaQuery().eq(TUserStudy::getUserId, userId)
- .eq(TUserStudy::getDisabled, 0).one();
Integer week = userStudyRecord.getWeek();
Integer day = userStudyRecord.getDay();
if (week.equals(completeStudy.getWeek()) && day.equals(completeStudy.getDay())) {
@@ -116,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);
}
}
// 更新学习时长
@@ -136,26 +141,52 @@
@Override
public void checkRate(TGame game, Integer userid, CompleteGameDTO completeStudy, List<TStudy> studyList) {
String answerRate = game.getAnswerRate();
+ // 下一周目逻辑
+ int quarterItem = 1;
+ 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);
+ // 记录学习季度
+ if (study.getId().equals(game.getStudyId())) {
+ quarterItem = quarter;
+ }
+ }
+ // 获取当前季度所有周目
+ List<TStudy> studyList1 = studyMap.get(quarterItem);
// 正确率达到通关率
if (completeStudy.getAccuracy() >= Integer.parseInt(answerRate)) {
// 获取用户超级记忆游戏记录
TUserStudy userStudy = this.lambdaQuery().eq(TUserStudy::getUserId, userid).one();
- Integer nextDay = DAY_MAP.get(String.valueOf(userStudy.getDay()));
- userStudy.setDay(nextDay);
- if (Constants.ONE.equals(nextDay)) {
- // 获取下一周目信息
- int index = -1;
- for (int i = 0; i < studyList.size(); i++) {
- if (studyList.get(i).getWeek().equals(userStudy.getWeek())) {
- index = i;
- break;
+ for (int i = 0; i < studyList1.size(); i++) {
+ TStudy tStudy = studyList1.get(i);
+ if (tStudy.getWeek().equals(userStudy.getWeek())) {
+ 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);
+ userStudy.setWeek(tStudy1.getWeek());
+ }
+ } else {
+ TStudy tStudy1 = studyList1.get(i + 1);
+ userStudy.setWeek(tStudy1.getWeek());
}
}
- int nextIndex = (index + 1) % studyList.size();
- TStudy nextStudy = studyList.get(nextIndex);
- // 更新学习进度及学习时长
- userStudy.setWeek(nextStudy.getWeek());
}
+ 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);
}
}
@@ -168,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);
}
}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/ExitLearnVO.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/ExitLearnVO.java
index df6dcd3..dc94a17 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/ExitLearnVO.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/ExitLearnVO.java
@@ -3,6 +3,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotNull;
+
/**
* @author HJL
* @version 1.0
@@ -10,6 +12,12 @@
*/
@Data
public class ExitLearnVO {
+
+ /**
+ * 所属季度
+ */
+ @ApiModelProperty("所属季度")
+ private Integer quarter;
/**
* 所属week
@@ -59,4 +67,11 @@
@ApiModelProperty("完成学习所用时长(秒)")
private Integer studyTime;
+ /**
+ * 答题进度
+ */
+ @ApiModelProperty("答题进度")
+ @NotNull(message = "答题进度不能为空!")
+ private Integer schedule;
+
}
diff --git a/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TIntegralRecordMapper.xml b/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TIntegralRecordMapper.xml
index c5d91f4..6426c91 100644
--- a/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TIntegralRecordMapper.xml
+++ b/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TIntegralRecordMapper.xml
@@ -13,5 +13,6 @@
and userId = #{userId}
</if>
</where>
+ order by createTime desc
</select>
</mapper>
diff --git a/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserPresentRecordMapper.xml b/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserPresentRecordMapper.xml
new file mode 100644
index 0000000..18ca6f4
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserPresentRecordMapper.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.study.mapper.TUserPresentRecordMapper">
+</mapper>
--
Gitblit v1.7.1